前言:
导航控制器和标签控制器是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. vs code搭建Django环境
  2. 学习区块链的十大理由
  3. python中如果要多次输入文本,关于文本游戏:文本游戏 – 如果语句基于输入文本 – Python...
  4. 信息系统项目管理师-项目成熟度模型、量化项目管理核心知识点思维脑图
  5. windows 平台下,运用 Python 进行简单的文件操作需要用到的函数
  6. EasyImage图床源码V2.0
  7. Android 系统(198)---Android解放双手之Gradle自动化打包实战
  8. 测试软件是否丢失数据,11种方法检测软件的可靠性
  9. window-linux移植
  10. Nagios插件开发指导
  11. NVIDIA vid2vid论文复现
  12. 阿里云服务器的介绍和使用
  13. 3A之自动白平衡(AWB)篇
  14. C语言——经典200道实例【基础例题100道——进阶例题100道】
  15. 解开“艾达之谜”:关于第一位程序员你所不知的故事
  16. 计算机一些专业术语,计算机专业术语大全
  17. 贝叶斯网络python实战(以泰坦尼克号数据集为例,pgmpy库)
  18. 6月25日科技资讯 |微信解封快手链接;AWS证实宕机;微软公司内部疑禁用Slack
  19. button标签的type属性
  20. 周易正易 (2001刊行本影印_易經大意)

热门文章

  1. 计算机毕业设计Java房屋出租(源码+系统+mysql数据库+lw文档)
  2. MySQL 查看版本的 5 种方法
  3. php 获取今天第一秒和最后一秒的时间戳
  4. 【自然语言处理】基于NLP的电影评论情感分析模型比较
  5. 计算机专业及相关专业目录,计算机相关专业目录
  6. 【计算机网络】计算机三级计算机网络笔记记录
  7. ios13修改dns都用什么服务器,苹果手机用哪个dns最快?教你配置DNS让网速飞起
  8. 【HTML】HTML网页设计---模仿电影网站
  9. 项目:Vue.js高仿饿了吗外卖APP(二)
  10. nginx php 403 js,Nginx 跨域 add_header 403状态下无效