對于那些不只一屏內(nèi)容的 WatchKit App 來說,你必須選擇一種在界面之間導(dǎo)航的方式。WatchKit App 支持兩種完全不一樣的導(dǎo)航方式:
盡管你不能在 App 里面混合使用兩種導(dǎo)航方式,但你可以在層級模式里面使用模態(tài)視圖。模態(tài)視圖是一種打斷用戶正常瀏覽流程來要求用戶輸入或是展示信息的一種方式。在翻頁模式和層級模式中都可以使用模態(tài)視圖。模態(tài)視圖本身可以包含一個視圖控制器或是包含多個基于翻頁模式的控制器。
通過在 App 的 Storyboard 里面創(chuàng)建從一個視圖控制器到下個視圖控制器的 next-page 類型的 segue 來設(shè)置使用翻頁模式。
在視圖控制器之間創(chuàng)建 next-page segue
你在 Storyboard 里面定義的 segue 會在 App 啟動的時候加載。你可以通過在程序啟動的早期調(diào)用 reloadRootControllersWithNames:contexts: 方法來動態(tài)設(shè)置你要顯示的頁面集。比如你可以在主視圖控制器的init方法里面調(diào)用以上方法來強制 WatchKit 加載其它的視圖集。
所有翻頁模式的視圖控制器都是在界面顯示之前就被創(chuàng)建并初始化好的,但一次只能顯示一個。一般來說,Watchkit 顯示初始化序列中的第一個視圖控制器。如果要改變初始顯示的頁面,在 init 或是 awakeWithContext: 方法中調(diào)用 becomeCurrentPage 方法。
用戶從一個界面導(dǎo)航到另一個界面的同時,WatchKit 負(fù)責(zé)激活、取消激活相應(yīng)的視圖控制器。在切換過程中,當(dāng)前顯示的視圖控制器的 didDeactivate 方法會被調(diào)用,接著會調(diào)用下一個將要顯示的視圖控制器的 willActivate 方法。通過視圖控制器的 willActivate
方法來跟新顯示最近的數(shù)據(jù)改變。
在層級模式界面,你通過 segue 告訴 WatchKit 什么時候跳轉(zhuǎn)到新的頁面,或是調(diào)用當(dāng)前視圖控制器的 pushControllerWithName:context: 方法。在 Storyboard 中你從一個視圖控制器上的一個按鈕,控件組,或是列表中的一行創(chuàng)建 push segue 到另一個視圖控制器。如果你喜歡用編程的方式實現(xiàn) push,在任意視圖控制器的 action 方法中調(diào)用 pushControllerWithName:context:
在 push 一個新的視圖控制器到屏幕上的時候,建議通過 pushControllerWithName:context:
方法的 context
參數(shù)傳入一個數(shù)據(jù)對象,通過這個對象可以新的視圖控制器在顯示之前可以獲取一些狀態(tài)信息,同時通過這個對象告訴新的視圖控制器哪些數(shù)據(jù)需要被顯示。
被 push 出來的視圖控制器會在屏幕的左上角有一個 “<” 標(biāo)志來提醒用戶可以導(dǎo)航回去。當(dāng)用戶點擊屏幕左上角或是在屏幕上左滑,WatchKit 會自動隱藏最上面的視圖控制器。你也可以通過調(diào)用 popController 方法來編程實現(xiàn)返回,但你不能使 App 的主視圖控制器消失。
模態(tài)界面通常是臨時打斷用戶的正常瀏覽來提示或是顯示信息。無論你 App 用的是什么導(dǎo)航方式,都可以在任何視圖控制器上顯示模態(tài)視圖。要模態(tài)的展示一個視圖控制器,可以使用以下方法中的任意一個:
創(chuàng)建一個 modal segue,連接到你想要顯示的視圖控制器。如果需要用 segue 顯示多個視圖,首先用 next-page segue 把需要模態(tài)展示的視圖控制器連接在一起,這樣你就把這些視圖控制器用翻頁模式組織在一起了。再用modal segue 連接到控制器組的第一個控制器上。如果 modal segue 連接到中間的某個控制器上,那么這個控制器之前的視圖將不會顯示。
模態(tài)視圖的左上角顯示了視圖控制器的標(biāo)題。當(dāng)用戶點擊該標(biāo)題時,Watchkit 會讓模態(tài)界面消失。因此最好設(shè)置有關(guān)閉模態(tài)界面提示意義的標(biāo)題。例如,當(dāng)顯示信息的時候,可以設(shè)置為Done
或Close
,如果沒有為視圖控制器設(shè)置標(biāo)題,WatchKit 默認(rèn)顯示 Cancel