前言:
导航控制器和标签控制器是ios中常用的两个控件。因此,特意写一篇文章记录一下,自己对导航控制器的理解,持续更新中。

  • 导航条UINavigationBar介绍
  • 容器UINavigationItem介绍
  • 控件UIBarButtonItem介绍
  • 导航控制器UINavigationController介绍
  • 导航控制器UINavigationController的xib实现
  • 导航控制器UINavigationController自定义返回键
  • 导航控制器UINavigationController转场动画
  • 导航控制器UINavigationController添加左滑push
  • 导航控制器UINavigationController拦截返回键事件

一、导航条UINavigationBar介绍

导航条是一个继承UIView的控件。以前这里有一个思维误区,认为UINavigationBar是导航控制器特有的。其实,它可以作为一个独立控件来使用,只不过是我们使用最多的地方还是导航控制器,很少在其它地方使用。另外,导航控制器将UINavigationBar封装起来,而不需要开发者手动设置。

这里将对它的属性进行详细解释:
UINavigationBar通常作为多个UINavigationItem的容器,以Stack的形式管理多个UINavigationItem,类似于导航控制器管理ViewController。其属性和方法如下:

  • pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated:这个方法用于将UINavigationItem压入UINavigationBar的堆栈
  • popNavigationItemAnimated:(BOOL)animated:这个方法用于将UINavigationItem弹出堆栈,不再显示
  • setItems:animated:(BOOL)animated:这个方法用于将设置UINavigationBar所包含的UINavigationItem
  • topItem:这个属性返回当前堆栈中最上层的UINavigationItem
  • backItem:这个属性返回当前堆栈中最底层的UINavigationItem

UINavigationItem属性和方法介绍:
UINavigationItem是NSObject类,同样也作为容器使用。它的结构是左边按钮、标题、右边按钮。每个按钮是UIBarButtonItem控件,也是NSObject类。

  • title:标题文本
  • titleView:设置UINavigationItem的标题控件。为自定义控件提供方便,优先级大于title
  • backBarButtonItem:用于设置返回键按钮形式
  • hidesBackButton:用于设置是否隐藏后退按钮
  • leftBarButtonItems:用于设置或返回UINavigationItem左边的多个按钮
  • rightBarButtonItems:用于设置或返回UINavigationItem右边的多个按钮
  • leftBarButtonItem:用于设置或返回UINavigationItem左边的单个按钮
  • rightBarButtonItem:用于设置或返回UINavigationItem右边的单个按钮

  • setHidesBackButton: animated:(BOOL)animated:用于设置是否显示后退按钮

  • setLeftBarButtonItems: animated:(BOOL)animated :用于设置左边多个按钮
  • setRightBarButtonItems: animated:(BOOL)animated :用于设置右边多个按钮
  • setLeftBarButtonItem: animated:(BOOL)animated:用于设置左边单个按钮
  • setRightBarButtonItem: animated:(BOOL)animated:用于设置右边单个按钮

这个以UINavigationBar添加UINavigationItem为例,请看效果图:

代码下载地址如下:
https://github.com/yscMichael/UINavigationBar

二、UIBarButtonItem介绍

三、导航控制器使用
上面看到UINavigationBar单独作为一个控件使用,并不能有很大的派场,所以这里重点介绍UINavigationController,这个在我们日常app开发过程中还是有很大用场的。

UINavigationController类似于UINavigationBar,它使用Stack的形式管理多个ViewController。这里UINavigationController对UINavigationBar进行了进一步封装,它会管理所有ViewController的navigationItem,导航控制器在将ViewController压入堆栈的同时,会将ViewController对应的navigationItem压入UINavigationBar所管理的栈。也就是说一个导航控制器对应一个UINavigationBar,这里的每个ViewController无法操作UINavigationBar,只能操作自己的navigationItem,来改变自己顶部导航条显示的内容。这里每个ViewController还可以设置自己的底部的工具条。

UINavigationController属性和方法详解:
topViewController:返回容器最顶层的ViewController,这个属性是只读的
visibleViewController:返回当前可见界面对应的ViewController,这个属性是可读的
viewControllers:该属性用于设置或者返回导航控制器能够管理的ViewController
setViewControllers:animated:(BOOL)animated:该方法同样用来设置导航控制器能够管理的ViewController

pushViewController: animated:(BOOL)animated:将ViewController压入导航控制器管理的栈中
popViewControllerAnimated:(BOOL)animated:将栈顶的ViewController弹出,返回被移除的ViewController
popToViewController: animated:(BOOL)animated:将弹出到指定的ViewController,返回被移除的ViewController
popToRootViewControllerAnimated:(BOOL)animated:将弹出到RootViewController,返回被移除的ViewController

UINavigationController控制器控制导航条的属性和方法:
navigationBar:返回导航控制器管理的导航条,每个导航控制器对应一个导航条。
navigationBarHidden:用于设置导航条是否隐藏。
setNavigationBarHidden: animated:(BOOL)animated:同上,是否隐藏导航条

UINavigationController控制器控制工具条的属性和方法:
toolbar:返回导航控制器管理的工具条,每个导航控制器对应一个工具条

备注:工具条用的比较少,所以这里特别讲解一下。工具条和上面的导航条是一致的,每个导航控制器对应一个工具条,每个ViewController要想显示工具条,不能直接操作toolbar属性,需要通过setToolbarItems: animated:(BOOL)animated来进行设置,稍后会进行详细讲解toolbar。

toolbarHidden:用于设置是否隐藏工具条
setToolbarHidden: animated:(BOOL)animated:用于设置是否隐藏工具条

四、导航控制器UINavigationController的xib实现、
这里首先你讲解一下storyBoard和xib的区别

ios学习笔记3--导航控制器详解相关推荐

  1. IOS学习笔记——ViewController生命周期详解

    在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewContro ...

  2. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解

    Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...

  3. spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)

    spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...

  4. 【学习笔记】线段树详解(全)

    [学习笔记]线段树详解(全) 和三个同学一起搞了接近两个月的线段树,头都要炸了T_T,趁心态尚未凉之前赶快把东西记下来... [目录] [基础]作者:\((Silent\)_\(EAG)\) [懒标记 ...

  5. [原创]Saltstack学习笔记:命令参数详解以及配置文件说明

    很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...

  6. Laravel学习笔记汇总——Collection方法详解

    ## Laravel学习笔记汇总--Collection方法详解 本文参考:https:// laravel.com/docs/8.x/collections // 返回整个底层的数组 collect ...

  7. UINavigationController导航控制器详解

    1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控 ...

  8. Android学习笔记——Android 签名机制详解

    Android 签名机制详解 近期由于工作需要在学习 Android 的签名机制,因为没有现成资料,只能通过开发者文档和阅读博客的方式对 Android 签名机制进行大致了解.过程中查阅到的资料相对零 ...

  9. [学习笔记] 伸展树splay详解+全套模板+例题[Luogu P3369 【模板】普通平衡树]

    文章目录 引入概念 全套模板 变量声明 update ==rotate旋转== splay操作 insert插入 delete删除 查找x的位置 查找第k大 前驱/后继 极小值-inf和极大值inf的 ...

最新文章

  1. 二层交换机、三层交换机与路由器的比较
  2. python修改字典某一项的函数_python – 更改字典作为函数的全局范围
  3. (原+转)ubuntu14中结束多个caffe进程中的某个
  4. 弄懂CNN,然后提升准确率4.21-4.27
  5. 【ubuntu】ubuntu18.04:在处理时有错误发生:ufw E: Sub-process /usr/bin/dpkg returned an error code (1)
  6. 信息系统服务器数量设置,《系统下服务器设置与优化.doc
  7. matplotlib中文乱码问题_MacOS解决Matplotlib的中文乱码问题
  8. Android给力模拟器,秒杀原生模拟器到渣
  9. Android ViewPager多页面滑动切换以及动画效果
  10. Thinking in Java 11.3 添加一组元素
  11. opencv 学习之 亮度检测
  12. 国内外有哪些有前景的 AR VR公司?
  13. Matlab的复共轭转置
  14. MRP系统运行计算逻辑浅析
  15. 不要被意外牵着鼻子走
  16. 论“女生不适合当程序员”
  17. Elasticsearch启动报错:warning: ignoring JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191; using bundled JDK
  18. java+url+空格转码_Web里URL空格的转换方法
  19. 看完《四海》,我只有一肚子的槽想吐
  20. js 将金额转换成大写汉字

热门文章

  1. XDAG iOS钱包Beta版本发布
  2. hibernate 中 Provided id of the wrong type for class 异常
  3. linux匿名工具,NeoLoader一款匿名去中心化的BT/eMule/网盘文件共享下载工具,支持win、mac、linux...
  4. aaaaaaaaaaA heH heH nuN
  5. Star CCM+相关资料分享
  6. 虚拟服务器显卡设置,PVE开启显卡虚拟化intel GVT-g
  7. 鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统
  8. 51单片机直流电机调速c语言,51单片机直流电机调速程序
  9. python音乐可视化_Python数据可视化:网易云音乐歌单
  10. PPT动画教程:插入声音(转)