重要:這只是開(kāi)發(fā)中API或技術(shù)的一個(gè)初步文檔。蘋(píng)果提供這些信息來(lái)幫助你在蘋(píng)果產(chǎn)品上采用這些技術(shù)和編程界面。這些信息可能發(fā)生變化,根據(jù)這個(gè)文檔實(shí)現(xiàn)的軟件必須在最終的操作系統(tǒng)軟件和最終的文檔上測(cè)試。本文檔的新版本可能用來(lái)作為未來(lái)API或技術(shù)的beta版。
UISplitViewController類是一個(gè)容器視圖控制器,展示一種主從結(jié)構(gòu)的界面。在這種主從結(jié)構(gòu)界面中,主要視圖中的變更會(huì)驅(qū)動(dòng)第二個(gè)視圖的變更。可以排列這兩個(gè)視圖控制器,這樣就可以并排顯示,一次顯示一個(gè)視圖,或者顯示一個(gè)隱藏另一個(gè)。在iOS 8之后,你可以在所有iOS設(shè)備上使用UISplitViewController類,在iOS早期版本,該類只能在iPad上使用。
當(dāng)構(gòu)建應(yīng)用的用戶界面時(shí),分屏視圖控制器通常是應(yīng)用窗口的根視圖控制器。分屏視圖控制器沒(méi)有自己的外觀。它的外觀大部分都是由子視圖控制器來(lái)定義的。你可以使用界面構(gòu)建器或編程方式指定該視圖控制器的viewControllers屬性來(lái)配置子視圖控制器。子視圖控制器可以為自定義視圖控制器或者其他容器視圖控制器,例如導(dǎo)航控制器。
分屏視圖控制器基于可用空間決定子視圖控制器的排列。在橫屏中,分屏視圖控制器盡可能并排的展示視圖控制器。在豎屏?xí)r,分屏視圖控制器更像導(dǎo)航控制器,顯示最初的主要視圖控制器,然后推出或彈出第二個(gè)視圖控制器。你也可以訪問(wèn)分屏視圖控制器設(shè)置preferredDisplayMode屬性的值完成具體的排列。
當(dāng)在屏幕上顯示時(shí),分屏視圖控制器使用delegate對(duì)象來(lái)管理其子視圖控制器的顯示。該代理是一個(gè)采用UISplitViewControllerDelegate協(xié)議的對(duì)象。使用該協(xié)議的方法來(lái)定制分屏視圖控制器發(fā)生變化時(shí)的行為。更多的信息參見(jiàn)UISplitViewControllerDelegate協(xié)議參考(UISplitViewControllerDelegate Protocol Reference)
配置分屏視圖界面外觀
分屏視圖控制器的可視化配置是由當(dāng)前顯示模式控制。你不用直接設(shè)置顯示模式,相反,你使用preferredDisplayMode屬性間接設(shè)置。分屏視圖控制器力求遵循你指定的顯示模式,但可能由于空間限制無(wú)法適應(yīng)顯示模式。例如,分屏視圖不能在豎屏?xí)r并排顯示它的子視圖。
列表1列出可用的顯示模式并描述了視圖控制器是如何排列在屏幕上。該列表也列出常用的顯示模式常量。

設(shè)置優(yōu)先顯示模式后,分屏視圖控制器更新并根據(jù)displayMode屬性展示顯示模式。你可以在任何時(shí)候更改優(yōu)先顯示模式,這樣分屏視圖控制器相應(yīng)的調(diào)整自己。分屏視圖控制器也安裝了一個(gè)內(nèi)置的手勢(shì)識(shí)別器,讓用戶使用劃動(dòng)動(dòng)作更改顯示模式。你可以通過(guò)設(shè)置presentsWithGesture屬性為NO來(lái)禁用這個(gè)手勢(shì)識(shí)別器。
displayModeButtonItem方法返回一個(gè)特定的工具欄按鈕來(lái)更改顯示模式,你可以結(jié)合到你的應(yīng)用的用戶界面。分屏視圖控制器管理行為和外觀。所有你要做的就是將它添加到界面中適當(dāng)?shù)膶?dǎo)航欄或工具欄。當(dāng)點(diǎn)擊時(shí),該按鈕發(fā)送一個(gè)動(dòng)作到分屏視圖控制器,告訴它更改當(dāng)前顯示模式為分屏視圖控制器代理的targetDisplayModeForActionInSplitViewController:方法制定的值。指定自動(dòng)顯示模式(或不實(shí)現(xiàn)代理方法)使分屏視圖控制器實(shí)現(xiàn)的行為符合當(dāng)前的size類。例如,iPad豎屏?xí)r,分屏視圖控制器可以在隱藏和覆蓋模式之間切換?;谑謩?shì)的動(dòng)作也使用委托方法來(lái)決定使用哪種顯示模式。
在分屏視圖界面改變子視圖控制器
在設(shè)計(jì)分屏視圖界面,最好不更改主要視圖控制器和第二視圖控制器。常見(jiàn)的技術(shù)是在兩個(gè)位置都設(shè)置導(dǎo)航視圖,在需要時(shí)推出和彈出新內(nèi)容。這些錨視圖控制器讓你更專注于你的內(nèi)容,而分屏視圖控制器在整個(gè)界面執(zhí)行其默認(rèn)行為。
在這種情況下,你需要改變主要視圖或第二視圖控制器,建議你使用showViewController:sender:和showDetailViewController:sender:方法。使用這些方法(而不是直接修改viewControllers屬性),讓分屏視圖控制器以最適合當(dāng)前環(huán)境顯示模式和大小展示指定視圖控制器。分屏視圖控制器知道如何以更直觀的方式調(diào)整界面。它甚至可以與其他視圖控制器(如導(dǎo)航控制器)展示視圖控制器。例如,在豎屏環(huán)境中,主要視圖控制器是一個(gè)導(dǎo)航控制器,調(diào)用showDetailViewController:sender:方法不會(huì)更換第二個(gè)視圖控制器。相反,主要視圖控制器將視圖控制器從導(dǎo)航堆棧上推出。
折疊和擴(kuò)大分屏視圖界面
當(dāng)分屏視圖控制器的size類在橫豎屏切換時(shí),它執(zhí)行折疊和擴(kuò)大轉(zhuǎn)換。在這個(gè)轉(zhuǎn)換期間,分屏視圖控制器變化顯示子視圖控制器。當(dāng)從橫屏切換到豎屏?xí)r,分屏視圖控制器折疊其中一個(gè)視圖到另一個(gè)視圖上。當(dāng)從豎屏切換到橫屏?xí)r,它擴(kuò)大視圖根據(jù)當(dāng)前顯示模式顯示一個(gè)或兩個(gè)子視圖控制器。
當(dāng)過(guò)渡到折疊界面時(shí),分屏視圖控制器使用代理管理過(guò)渡。在折疊過(guò)渡結(jié)束時(shí),分屏視圖控制器通常只顯示主要視圖控制器的內(nèi)容。你可以在分屏視圖控制器代理中實(shí)現(xiàn)primaryViewControllerForCollapsingSplitViewController:方法,來(lái)更改這一行為。你可以使用該方法來(lái)指定第二個(gè)視圖或完全不同的視圖控制器,也許該視圖在豎屏環(huán)境中更加適合展示。
通過(guò)調(diào)用代理來(lái)指定哪個(gè)視圖成為主要視圖控制器,并讓代理來(lái)執(zhí)行擴(kuò)大到折疊的轉(zhuǎn)換。如果你實(shí)現(xiàn)折疊分屏視圖界面的代理方法,你必須實(shí)現(xiàn)primaryViewControllerForExpandingSplitViewController:和splitViewController:separateSecondaryViewControllerFromPrimaryViewController:方法來(lái)擴(kuò)大視圖。如果你不實(shí)現(xiàn)任何方法,分屏視圖控制器提供默認(rèn)的行為來(lái)處理擴(kuò)大和折疊的轉(zhuǎn)換。
更多關(guān)于管理折疊和擴(kuò)大過(guò)渡的方法的信息,參見(jiàn)UISplitViewControllerDelegate協(xié)議參考(UISplitViewControllerDelegate Protocol Reference)。
將消息轉(zhuǎn)發(fā)到其子視圖控制器
分屏視圖控制器負(fù)責(zé)協(xié)調(diào)應(yīng)用窗口和其子視圖控制器。因此,所有發(fā)送到子視圖控制器的消息必須經(jīng)過(guò)分屏視圖控制器。這通常與你預(yù)期的一樣,消息應(yīng)該相對(duì)直觀的流動(dòng)。例如,只有當(dāng)相應(yīng)的子視圖控制器出現(xiàn)在屏幕上,才會(huì)發(fā)送視圖出現(xiàn)和消失的消息。
狀態(tài)保護(hù)
在iOS6之后,如果你給分屏視圖控制器的restorationIdentifier屬性賦值,它保護(hù)任何有自己標(biāo)示符的子視圖控制器。在下一個(gè)啟動(dòng)周期,分屏視圖控制器恢復(fù)保護(hù)的視圖到以前的狀態(tài)。分屏視圖控制器的子視圖控制器也許使用相同的標(biāo)示符。分屏視圖控制器會(huì)自動(dòng)存儲(chǔ)額外信息確保每個(gè)子視圖的恢復(fù)路徑是獨(dú)一無(wú)二的。
更多關(guān)于保護(hù)和恢復(fù)工作狀態(tài)的信息,參見(jiàn)iOS應(yīng)用編程指南(iOS App Programming Guide)。
管理子視圖控制器
·viewControllersProperty
·presentsWithGestureProperty
管理顯示模式
·preferredDisplayModeProperty
·displayModeProperty
獲取分屏視圖配置
·preferredPrimaryColumnWidthFractionProperty
·primaryColumnWidthProperty
·minimumPrimaryColumnWidthProperty
·maximumPrimaryColumnWidthProperty
訪問(wèn)代理對(duì)象
顯示視圖控制器的方法
·-?showDetailViewController:sender:
常量
·UISplitViewControllerDisplayMode
·Split View Controller Dimensions