UINavigationController導航控制器個人筆記

UINavigationController是IOS中頁面佈局的控制器之一,繼承於UIViewController。導航控制器管理一系列顯示層次型信息的場景。它創建一個視圖管理器"棧",棧底爲根視圖控制器,用戶在場景間切換時,依次將試圖控制器壓入棧中,且當前場景的試圖控制器位於棧頂。要返回上一級,導航控制器將彈出棧頂的控制器,從而回到它下面的控制器。導航控制器還管理一個導航欄(UINavigationBar)。導航欄類似於工具欄,但它是使用導航項(UINavigationItem)實例填充的,該實例被加入到導航控制器管理的每個場景中。默認情況下,場景的導航項包含一個標題和一個Back按鈕。Back按鈕是以欄按鈕項(UIBarButtonItem)的方式加入到導航項的。

導航項在Attributes inspector面板裏有三個可設置屬性:Title、Prompt和Back Button
Title -- 導航項的標題
Prompt -- 顯示在標題上方的文本,向用戶提供使用說明
Back Button -- 下一個場景的後退按鈕的文本,假如沒有設置,默認顯示的文本是標題

在任何場景中,都可通過屬性parentViewController來獲取導航控制器。

UINavigationController還有其他的很多屬性,遠遠不止我說的這些,還有:

1、navigationItem

navigationItem是UIViewController的一個屬性,這個屬性是爲UINavigationController服務的。navigation item在navigation Bar代表一個viewController,具體一點兒來說就是每一個加到navigationController的viewController都會有一個對應的navigationItem,該對象由viewController以懶加載的方式創建,稍後我們可以在對象中堆navigationItem進行配置,可以設置leftBarButtonItem, rightBarButtonItem, backBarButtonItem, title以及prompt等屬性。

2、titleTextAttributes

這是UINavigationBar的一個屬性,通過它你可以設置title部分的字體

3、wantsFullScreenLayou
viewController的一個屬性,這個屬性默認值是NO,如果設置爲YES的話,如果statusbar,navigationbar, toolbar是半透明的話,viewController的view就會縮放延伸到它們下面,但注意一點兒tabBar不在範圍內,即無論該屬性是否爲YES,view都不會覆蓋到tabbar的下方。
4、navigationBar
這個屬性可以算是UINavigationController的靈魂之一,它維護了一個和UINavigationController中viewControllers對應的navigationItem的stack,該stack用於負責navigationbar的刷新。“注意:如果navigationbar中navigationItem的stack和對應的NavigationController中viewController的stack是一一對應的關係,如果兩個stack不同步就會拋出異常。當pushViewcontroller的之後,強制把navigationBar中的navigationItem pop一個出去,程序立馬掛起。
5、UINavigationControllerDelegate(代理方法)
視圖控制器有兩個代理方法較爲常用。一個是navigationController:willShowViewController:animated:,他在一個視圖控制器入棧之前被觸發;另一個是navigationController:didShowViewController:animated:;他在一個視圖控制器入棧之後被觸發。
就相當一個viewController要顯示的時候通知一下外面,給你一個機會進行設置
6、UINavigationController的viewControllers屬性
通過該屬性我們可以實現一次性替換整個navigationController的層次, 這個過程如果通過setViewControllers:animated:來設置,並指定動畫爲YES的畫,動畫將會從當前的navigationController所顯示的vc跳轉到所設置的目標viewController的最頂層的那個VC,而中間其他的VC將會被直接從VC層級中移除和添加進來(沒有動畫)。
7、topViewController Vs visibleViewController
topViewController代表當前navigation棧中最上層的VC,而visibleViewController代表當前可見的VC,它可能是topViewController,也可能是當前topViewController present出來的VC。因此UINavigationController的這兩個屬性通常情況下是一樣,但也有可能不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章