一张图让你清晰 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

navigationItem

时间: 2024-10-19 13:38:01

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

一张图理解prototype、proto和constructor的三角关系

× 目录 [1]图示 [2]概念 [3]说明[4]总结 前面的话 javascript里的关系又多又乱.作用域链是一种单向的链式关系,还算简单清晰:this机制的调用关系,稍微有些复杂:而关于原型,则是prototype.proto和constructor的三角关系.本文先用一张图开宗明义,然后详细解释原型的三角关系 图示 概念 上图中的复杂关系,实际上来源就两行代码 function Foo(){}; var f1 = new Foo; [构造函数] 用来初始化新创建的对象的函数是构造函数.在

一张图5分钟熟悉MarkDown的基本语法

看到zealer上面有介绍MarkDown的,以前在老罗的发布会也听说过,说锤子便签支持MarkDown,但是不知道有什么用,现在来看看,确实不错. MarkDown的好处是让你可以专注于写字本身,而不需要经常动鼠标或者动手指去排版. 我在网上找到了一个MarkDown简单语法的介绍文章,我花了半个小时学习了一下,然后将里面的核心内容总结成了一张图,这样更加清晰明了. 我相信你只需要花5分钟就能记住这些语言特性,因为它确实足够简单.如果怕忘了,可以存一下这张图. 参考资料: 认识与入门 Mark

七张图解读Java多线程

七张图解读Java多线程 --by:coder-pig,转载请注明出处~ 本节引言: 如题,笔者把Java多线程一些概念性的东西以及一些基础的东西都归纳到这七张图中,其中囊括 基本的多线程概念,创建线程,线程组,线程池,以及自定义简单的线程池,还附有代码, 大家也可以像笔者一样,把这七张图mark后打印出来,偶尔回味回味~ J2SE多线程 Part 1 J2SE多线程 Part 2 J2SE多线程 Part 3 J2SE多线程 Part 4 J2SE多线程 Part 5 J2SE多线程 Part

通过三张图了解Redux中的重要概念

上周利用业余的时间看了看Redux,刚开始有点不适应,一下在有了Action.Reducer.Store和Middleware这么多新的概念. 经过一些了解之后,发现Redux的单向数据里的模式还是比较容易理解的,结合着Redux的单向数据流模型,很多概念就比较清晰了. 下面就按照自己的理解整理出了Redux中相关的内容,如果你也刚开始学习Redux,希望能给你一个直观的认识. Action/Reducer/Store 首先,先看看第一张图,图中展示了Redux的单向数据流,以及Action.R

一张图搞定OAuth2.0

1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常简单的一件事情,网上一堆神乎其神的讲解,让我不得不写一篇文章来终结它们. 一项新的技术,无非就是了解它是什么,为什么,怎么用.至于为什么,本篇文章不做重点探讨,网上会有各种文章举各种什么丢钥匙.发船票的例子供你去阅读,个人认为还是有些哗众取宠,没有聊到本质. 那我们就重点聊聊OAuth2.0是什么,怎么用.但首先在读本文之前,你要先对OAuth2.0有一定的了解,建议先读一下阮一峰的oauth2.0文章,直接看

一张图30分钟快速Python入门

国外一个大牛使用一张图来讲述Python的基本概念,让你30分钟快速入门.通过该程序,可以了解快速Python语言基本的语法结构和使用方法,它的基本程序如下: 当然看不懂没关系这里还有中文版的 # -*- coding:utf-8 -*- # #如果文件中有使用中文的地方,一定要使用这一行来声明编码,同时文件本身也存储成UTF-8编码 #hello_world.py #脚本文件一般采用.py后缀 # Quick Python Script Explanation for Progeammers

两张图解读Java异常与断言

两张图解读Java异常与断言                                 --转载请注明出处:coder-pig 本节引言: 前天发布的"七张图解析Java多线程"大家的反响不错,嗯呢,今天再来两张吧, 关于Java异常与断言的,涉及到的东西有: ①什么是异常,为什么会出现异常,异常处理机制模型,常见异常信息总结,检验异常与非检验异常; 异常的捕获:try-catch块,finally块,多重catch块,try-catch块的嵌套; 异常的声明:throws回避异

用两张图告诉你,为什么你的 App 会卡顿

Cover有什么料?从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么?知道Android究竟是如何在屏幕上显示我们期望的画面的?对Android的视图架构有整体把握.学会从根源处分析画面卡顿的原因.掌握如何编写一个流畅的App的技巧.从源码中学习Android的细想.收获两张自制图,帮助你理解Android的视图架构. link从setContentView()说起public class AnalyzeViewFrameworkActivity extends

js多张图片合成一张图,canvas(海报图,将二维码和背景图合并) -----vue

思路:vue中图片合并 首先准备好要合并的背景图,和请求后得到的二维码, canvas画图,将两张背景图和一张二维码用canvas画出来, 将canvas再转为img 注意canvas和图片的清晰图和图片的尺寸位置 开始时canvas是隐藏的,两张背景图时显示的,当canvas画完后再转为img的时候,隐藏canvas和背景图,显示canvas转完的图片(也就是合并后的图片) 这个适配方式可能有些瑕疵,所以会加了很多设备的判断 代码: html      <div class="wap-p