API翻譯:UINavigationController

UINavigationController

UINavigationController 類實(shí)現(xiàn)了一個(gè)用于管理分層內(nèi)容導(dǎo)航的專用視圖控制器。 該導(dǎo)航界面可以有效地呈現(xiàn)您的數(shù)據(jù)验游,并使用戶更容易瀏覽該內(nèi)容客税。 您通常按照原樣使用此類犀盟,但您也可以使用子類來自定義類的行為。

預(yù)覽

導(dǎo)航界面呈現(xiàn)的屏幕通常會(huì)模擬您的數(shù)據(jù)層次結(jié)構(gòu)。 在層次結(jié)構(gòu)的每個(gè)級(jí)別中姨谷,您提供一個(gè)適當(dāng)?shù)钠聊唬ㄓ勺远x視圖控制器管理)來顯示該級(jí)別的內(nèi)容。 圖1顯示了iOS模擬器中“設(shè)置”應(yīng)用程序提供的導(dǎo)航界面的示例映九。 第一個(gè)屏幕向用戶顯示包含首選項(xiàng)的應(yīng)用程序列表梦湘。 選擇應(yīng)用程序會(huì)顯示該應(yīng)用程序的各個(gè)設(shè)置和設(shè)置組。 選擇組會(huì)產(chǎn)生更多設(shè)置等等。 除了根視圖之外捌议,導(dǎo)航控制器提供一個(gè)后退按鈕哼拔,以允許用戶返回到上一層次結(jié)構(gòu)。

圖 1

導(dǎo)航控制器對(duì)象使用(由視圖控制器數(shù)組表示的)導(dǎo)航堆棧(navigation stack)管理當(dāng)前顯示的屏幕瓣颅。 數(shù)組中的第一個(gè)視圖控制器是根視圖控制器管挟。 數(shù)組中的最后一個(gè)視圖控制器是當(dāng)前正在顯示的視圖控制器。 您可以使用 segue 或使用此類中的方法從堆棧中添加和刪除視圖控制器弄捕。 用戶還可以使用導(dǎo)航欄中的后退按鈕或使用左側(cè)滑動(dòng)手勢(shì)來移除最上面的視圖控制器僻孝。

導(dǎo)航控制器管理界面頂部的導(dǎo)航欄和界面底部的可選工具欄。 導(dǎo)航欄始終存在守谓,并由導(dǎo)航控制器本身管理穿铆,導(dǎo)航控制器本身使用導(dǎo)航堆棧上的視圖控制器提供的內(nèi)容來更新導(dǎo)航欄。 當(dāng) toolbarHidden 屬性為 NO 時(shí)斋荞,導(dǎo)航控制器將以最上層視圖控制器提供的內(nèi)容類似地更新工具欄荞雏。

導(dǎo)航控制器使用委托(delegate)對(duì)象協(xié)調(diào)其行為。 委托對(duì)象可以覆蓋視圖控制器的推送或彈出平酿,提供自定義的轉(zhuǎn)換動(dòng)畫凤优,并指定導(dǎo)航界面的首選方向。 您提供的委托對(duì)象必須遵守 UINavigationControllerDelegate 協(xié)議蜈彼。

圖2顯示了導(dǎo)航控制器與其管理對(duì)象之間的關(guān)系筑辨。 使用導(dǎo)航控制器的指定屬性訪問這些對(duì)象。

導(dǎo)航控制器視圖

導(dǎo)航控制器是一個(gè)容器視圖控制器——也就是說幸逆,它將其他視圖控制器的內(nèi)容嵌入到其中棍辕。 您可以從其 view 屬性訪問導(dǎo)航控制器的視圖。 此視圖包含導(dǎo)航欄还绘,可選的工具欄以及與最上層視圖控制器對(duì)應(yīng)的內(nèi)容視圖楚昭。 圖3顯示了如何組合這些視圖來呈現(xiàn)整個(gè)導(dǎo)航界面。 (在該圖中拍顷,導(dǎo)航界面進(jìn)一步嵌入到 tab bar 界面中抚太。)雖然導(dǎo)航欄和工具欄視圖的內(nèi)容發(fā)生變化,但視圖本身不會(huì)昔案。 實(shí)際更改的唯一視圖是導(dǎo)航堆棧上最上層視圖控制器提供的自定義內(nèi)容視圖尿贫。

注意

在iOS 7及更高版本中,因?yàn)閮?nèi)容視圖在導(dǎo)航欄下方爱沟,您必須在設(shè)計(jì)視圖控制器內(nèi)容時(shí)考慮該空間帅霜。

導(dǎo)航控制器管理導(dǎo)航欄和可選導(dǎo)航工具欄的創(chuàng)建,配置和顯示呼伸。 允許自定義導(dǎo)航欄的外觀相關(guān)屬性身冀,但是千萬不要直接更改其 frame钝尸,boundsalpha值。 如果您將 UINavigationBar 子類化搂根,則必須使用initWithNavigationBarClass:toolbarClass: 方法初始化導(dǎo)航控制器珍促。 要隱藏或顯示導(dǎo)航欄,請(qǐng)使用navigationBarHidden 屬性或 setNavigationBarHidden:animated: 方法剩愧。

導(dǎo)航控制器使用與導(dǎo)航堆棧上的視圖控制器相關(guān)聯(lián)的導(dǎo)航項(xiàng)目對(duì)象(UINavigationItem 類的實(shí)例)動(dòng)態(tài)構(gòu)建導(dǎo)航欄的內(nèi)容猪叙。 要定制導(dǎo)航欄的整體外觀,請(qǐng)使用 UIAppearance API仁卷。 要更改導(dǎo)航欄的內(nèi)容穴翩,您必須配置自定義視圖控制器的導(dǎo)航項(xiàng)。 有關(guān)導(dǎo)航項(xiàng)的更多信息锦积,請(qǐng)參閱 UINavigationItem芒帕。

更新導(dǎo)航欄(Navigation Bar)

每次頂層的視圖控制器更改時(shí),導(dǎo)航控制器會(huì)相應(yīng)地更新導(dǎo)航欄丰介。 具體地背蟆,導(dǎo)航控制器更新顯示在三個(gè)導(dǎo)航欄位置中的每一個(gè)的欄按鈕項(xiàng):左,中哮幢,右带膀。 按鈕項(xiàng)是 UIBarButtonItem 類的實(shí)例。 您可以使用自定義內(nèi)容創(chuàng)建按鈕項(xiàng)橙垢,或根據(jù)需要?jiǎng)?chuàng)建標(biāo)準(zhǔn)系統(tǒng)按鈕項(xiàng)垛叨。

導(dǎo)航欄的 tint 由導(dǎo)航欄本身的屬性控制。 使用 tintColor 屬性更改導(dǎo)航欄中 Item 的顏色钢悲,并使用 barTintColor 屬性來更改導(dǎo)航欄本身的顏色点额。 導(dǎo)航欄不會(huì)從當(dāng)前顯示的視圖控制器中繼承其 tintColor

有關(guān)導(dǎo)航欄的更多信息莺琳,請(qǐng)參閱 UINavigationBar。 有關(guān)如何創(chuàng)建條形按鈕項(xiàng)的更多信息载慈,請(qǐng)參閱 UIBarButtonItem惭等。

The Left Item

除了導(dǎo)航堆棧上的根視圖控制器之外,導(dǎo)航欄左側(cè)的 Item 可以導(dǎo)航返回到上一個(gè)視圖控制器办铡。 這個(gè)最左邊按鈕的內(nèi)容確定如下:

  • 如果新創(chuàng)建的最頂層視圖控制器具有自定義的左欄按鈕Item辞做,則顯示該Item。 要指定自定義左欄按鈕寡具,請(qǐng)?jiān)O(shè)置視圖控制器導(dǎo)航項(xiàng)目的 leftBarButtonItem 屬性秤茅。
  • 如果最頂層視圖控制器沒有自定義左欄按鈕項(xiàng),但是上一個(gè)視圖控件的導(dǎo)航項(xiàng)在其 backBarButtonItem 屬性中有一個(gè)對(duì)象童叠,導(dǎo)航欄將顯示該項(xiàng)框喳。
  • 如果任何一個(gè)視圖控制器都沒有指定自定義導(dǎo)航欄欄按鈕項(xiàng)课幕,則使用默認(rèn)的后退按鈕,并將該按鈕的標(biāo)題設(shè)置為上一個(gè)視圖控制器的 title 屬性的值五垮,即視圖控制器下一級(jí)堆棧乍惊。 (如果導(dǎo)航堆棧中只有一個(gè)視圖控制器,則不顯示后退按鈕放仗。)

注釋

假設(shè)通過VC1pushVC2润绎,那么如果設(shè)置VC1.navigationItem.backBarButtonItem就會(huì)顯示在VC2的左上角返回按鈕;如果再設(shè)置VC2.navigationItem.leftBarButtonItem則會(huì)覆蓋VC1的設(shè)置诞挨;如果VC1和VC2都沒有設(shè)置莉撇,則會(huì)顯示默認(rèn)的backBarButtonItem,它的標(biāo)題是VC1的title惶傻。

注意

如果后退按鈕的標(biāo)題太長而不能放在可用空間中棍郎,則導(dǎo)航欄可以將字符串“后退”替換實(shí)際的按鈕標(biāo)題。 只有后退按鈕由前一個(gè)視圖控制器提供時(shí)达罗,導(dǎo)航欄才會(huì)執(zhí)行此操作坝撑。 就算新的頂級(jí)視圖控制器自定義了左欄返回按鈕項(xiàng) - 該導(dǎo)航項(xiàng)的 leftBarButtonItemleftBarButtonItems 屬性中的對(duì)象 - 導(dǎo)航欄也不會(huì)更改按鈕標(biāo)題。

The Middle Item

導(dǎo)航控制器更新導(dǎo)航欄的中間項(xiàng)粮揉,如下所示:

  • 如果新的頂級(jí)視圖控制器具有自定義標(biāo)題視圖巡李,則導(dǎo)航欄將顯示該視圖以替代默認(rèn)標(biāo)題視圖。 要指定自定義標(biāo)題視圖扶认,請(qǐng)?jiān)O(shè)置視圖控制器導(dǎo)航項(xiàng)的 titleView 屬性侨拦。
  • 如果沒有設(shè)置自定義標(biāo)題視圖,則導(dǎo)航欄將顯示包含視圖控制器默認(rèn)標(biāo)題的標(biāo)簽辐宾。 該標(biāo)簽的字符串通常從視圖控制器本身的 title 屬性獲取狱从。 如果要顯示與視圖控制器相關(guān)的標(biāo)題不同的標(biāo)題,請(qǐng)改為設(shè)置視圖控制器導(dǎo)航項(xiàng)的標(biāo)題屬性叠纹。

The Right Item

導(dǎo)航控制器更新導(dǎo)航欄的右側(cè)項(xiàng)季研,如下所示:

  • 如果新的頂級(jí)視圖控制器具有自定義右鍵按鈕項(xiàng)目,則顯示該項(xiàng)目誉察。 要指定自定義右鍵按鈕項(xiàng)目与涡,請(qǐng)?jiān)O(shè)置視圖控制器導(dǎo)航項(xiàng)目的 rightBarButtonItem 屬性。
  • 如果沒有指定自定義的右欄按鈕項(xiàng)目持偏,則導(dǎo)航欄在該欄的右側(cè)不顯示驼卖。

展示Toolbar

導(dǎo)航控制器對(duì)象在其視圖層次結(jié)構(gòu)中管理可選工具欄(Toolbar)。顯示時(shí)鸿秆,此工具欄從活動(dòng)視圖控制器的toolbarItems 屬性中獲取其當(dāng)前的一組項(xiàng)目酌畜。當(dāng)前視圖控制器更改時(shí),導(dǎo)航控制器更新工具欄項(xiàng)目以匹配新的視圖控制器卿叽,在適當(dāng)時(shí)將新項(xiàng)目動(dòng)畫化桥胞。

導(dǎo)航工具欄默認(rèn)隱藏恳守,但您可以通過調(diào)用導(dǎo)航控制器對(duì)象的 setToolbarHidden:animated:方法來顯示導(dǎo)航界面。如果不是所有的視圖控制器都支持工具欄項(xiàng)埠戳,您的委托對(duì)象可以調(diào)用此方法在隨后的推送和彈出操作期間切換工具欄的可見性井誉。要使用自定義 UIToolbar 子類,請(qǐng)使用 initWithNavigationBarClass:toolbarClass:方法初始化導(dǎo)航控制器整胃。如果您使用自定義工具欄和導(dǎo)航欄子類來創(chuàng)建導(dǎo)航控制器颗圣,請(qǐng)注意,在將導(dǎo)航控制器顯示在屏幕上之前屁使,請(qǐng)注意您需要按下并設(shè)置視圖控制器在岂。

適應(yīng)不同環(huán)境

導(dǎo)航界面在水平緊湊和水平正常的環(huán)境中保持不變。 當(dāng)在兩個(gè)環(huán)境之間切換時(shí)蛮寂,只有導(dǎo)航控制器視圖的大小發(fā)生變化蔽午。 導(dǎo)航控制器不會(huì)更改其視圖層次結(jié)構(gòu)或其視圖的布局。

當(dāng)在導(dǎo)航堆棧上配置視圖控制器之間的 segues 時(shí)酬蹋,標(biāo)準(zhǔn)的 ShowShow Detail 行為如下:

  • Show segue—導(dǎo)航控制器將指定的視圖控制器 push 入其導(dǎo)航堆棧及老。
  • Show Detail segue—導(dǎo)航控制器以模態(tài)方式呈現(xiàn)指定的視圖控制器。

其他 segues類型的行為不變范抓。

Interface Behaviors

導(dǎo)航控制器為其界面支持以下行為:

  • Supported interface orientations (支持的接口方向) - 確定支持的接口方向時(shí)骄恶,導(dǎo)航控制器對(duì)象不會(huì)在其導(dǎo)航堆棧上查看視圖控制器。 在iPhone上匕垫,導(dǎo)航控制器支持除肖像上下顛倒之外的所有方向僧鲁。 在iPad上,導(dǎo)航控制器支持所有方向象泵。 如果導(dǎo)航控制器具有委托對(duì)象寞秃,則委托可以使用navigationControllerSupportedInterfaceOrientations:方法指定一組不同的支持方向。
  • Presentation context (演示文稿上下文) - 導(dǎo)航控制器定義了模態(tài)呈現(xiàn)視圖控制器的呈現(xiàn)上下文偶惠。 當(dāng)模態(tài)轉(zhuǎn)換樣式為 UIModalPresentationCurrentContextUIModalPresentationOverCurrentContext 時(shí)春寿,導(dǎo)航堆棧中的視圖控制器的模態(tài)呈現(xiàn)覆蓋整個(gè)導(dǎo)航界面。

保存狀態(tài)

在iOS 6及更高版本中忽孽,如果為此視圖控制器的 restoreIdentifier 屬性分配值堂淡,則會(huì)嘗試在其導(dǎo)航堆棧上保留子視圖控制器。 導(dǎo)航控制器從堆棧底部開始向上移動(dòng)扒腕,對(duì)每個(gè)具有有效恢復(fù)標(biāo)識(shí)符字符串的視圖控制器進(jìn)行編碼。 在下一個(gè)啟動(dòng)周期中萤悴,導(dǎo)航控制器將保留的視圖控制器按照保留的順序恢復(fù)到導(dǎo)航堆棧瘾腰。

推送到導(dǎo)航堆棧的子視圖控制器可能使用相同的恢復(fù)標(biāo)識(shí)符。 導(dǎo)航控制器自動(dòng)存儲(chǔ)附加信息覆履,以確保每個(gè)孩子的恢復(fù)路徑是唯一的蹋盆。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末费薄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子栖雾,更是在濱河造成了極大的恐慌楞抡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件析藕,死亡現(xiàn)場(chǎng)離奇詭異召廷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)账胧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門竞慢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人治泥,你說我怎么就攤上這事筹煮。” “怎么了居夹?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵败潦,是天一觀的道長。 經(jīng)常有香客問我准脂,道長劫扒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任意狠,我火速辦了婚禮粟关,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘环戈。我一直安慰自己闷板,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布院塞。 她就那樣靜靜地躺著遮晚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拦止。 梳的紋絲不亂的頭發(fā)上县遣,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音汹族,去河邊找鬼萧求。 笑死,一個(gè)胖子當(dāng)著我的面吹牛顶瞒,可吹牛的內(nèi)容都是我干的夸政。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼榴徐,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼守问!你這毒婦竟也來了匀归?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤耗帕,失蹤者是張志新(化名)和其女友劉穎穆端,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仿便,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡体啰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了探越。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狡赐。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钦幔,靈堂內(nèi)的尸體忽然破棺而出枕屉,到底是詐尸還是另有隱情,我是刑警寧澤鲤氢,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布搀擂,位于F島的核電站,受9級(jí)特大地震影響卷玉,放射性物質(zhì)發(fā)生泄漏哨颂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一相种、第九天 我趴在偏房一處隱蔽的房頂上張望威恼。 院中可真熱鬧,春花似錦寝并、人聲如沸箫措。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斤蔓。三九已至,卻和暖如春镀岛,著一層夾襖步出監(jiān)牢的瞬間弦牡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工漂羊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驾锰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓走越,卻偏偏與公主長得像稻据,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫捻悯、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評(píng)論 4 62
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,747評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,727評(píng)論 22 665
  • 翻譯自“View Controller Programming Guide for iOS”淤毛。 1 彈出視圖控制器...
    lakerszhy閱讀 3,481評(píng)論 2 20
  • 林雪面色緋紅地看著手中用A4紙打印出來的整整十頁“情書”低淡。她已經(jīng)看到了第三頁姓言,居然還沒有進(jìn)入正題。 旁邊正在做作業(yè)...
    清涼閱讀 379評(píng)論 0 0