你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> 一張圖讓你清晰 UIViewController,UINavigationController和 UITabBarController的層次關系

一張圖讓你清晰 UIViewController,UINavigationController和 UITabBarController的層次關系

編輯:關於IOS

在學習多視圖控制器的時候,曾經有一個問題一直困擾著我,就是給標簽欄title賦值的問題。

就常用的層次關系來說,一個標簽欄視圖 裡面 套 一個 導航視圖 ,導航視圖 裡 套 我們展示內容 的 內容視圖 。

UITabBarController->UINavigationController->UIViewController

UITabBarController和UINavigationController 都繼承自UIViewController

UIViewControlleller  的tabBarItem

的詳情裡面最後一句話

The default value is a tab bar item that displays the view controller'€™s title.

標簽欄元素默認顯示的是 視圖控制器的標題。

navigationItem 裡面同樣有這麼一句話


The default behavior is to create a navigation item that displays the view controller'€™s title.

默認創建一個導航欄元素顯示 視圖控制器的標題

1.因此 activetyLC.title = @"活動"; 同時給導航欄和標簽欄賦值  就有跡可循了。

2. 若 我們的導航欄標題 和標簽欄 標題顯示的不一樣的時候如何賦值呢。


UIViewController是UINavigationController和 UITabBarController的父類

我們看下UIViewController裡面的navigationItem 和 tabBarItem 是如何說明的

The tab bar item that represents the view controller when added to a tab bar controller.


標簽欄元素 代表 控制器被  添加到的標簽欄控制器 的標簽欄元素 (父標簽欄 標簽元素)

The navigation item used to represent the view controller in a parent'€™s navigation bar. (read-only)

導航欄元素代表著 父視圖控制器的導航欄 元素 (父 導航欄 導航元素)

 

按照上面我所說的層次關系,在 最上層的 UIViewController

這樣寫:

self.navigationItem.title = @"活動";

self.tabBarItem.title = @"活動123";  會如何??

結果是: 導航欄 標題 顯示  “活動” ,標簽欄為 “空”。

若我們給導航欄的 tabBarItem 賦值。

activetyNC.tabBarItem.title = @"活動";

則 標簽欄 正常顯示 “活動”。

結合上面的 UIViewController裡面對 導航元素和 標簽元素的 介紹。 這樣就明白了。

雖然


UINavigationController和 UITabBarController 都繼承自 UIViewController,他們中都有 標簽元素和導航元素屬性,但是

對 於:UIViewController navigationItem 和 tabBarItem 沒有賦值,則為空,若父視圖為導航欄控制器,navigationItem為 導航欄控制器的 navigationItem; 若父類為 標簽控制器,則 tabBarItem為 標簽控制器的 tabBarItem。

還有一點: 導航欄控制器,默認沒有 標簽欄的。 以前記錯了。下面有一張圖,會讓我們更清晰的了解這一點。

這張圖片不是說,導航欄後面默認有一個 標簽欄,而是說 導航欄 進一步 被嵌入到了一個 標簽欄裡面。粗心大意害死人啊。


In this figure, the navigation interface is further embedded inside a tab bar interface.


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved