一张图让你清晰 UIViewController,UINavigationController和 UITabBarController的层次关系

在学习多视图控制器的时候,曾经有一个问题一直困扰着我,就是给标签栏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.



activetyLC


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值