ios学习笔记3--导航控制器详解
前言:
导航控制器和标签控制器是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--导航控制器详解相关推荐
- IOS学习笔记——ViewController生命周期详解
在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewContro ...
- java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解
Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...
- spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)
spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...
- 【学习笔记】线段树详解(全)
[学习笔记]线段树详解(全) 和三个同学一起搞了接近两个月的线段树,头都要炸了T_T,趁心态尚未凉之前赶快把东西记下来... [目录] [基础]作者:\((Silent\)_\(EAG)\) [懒标记 ...
- [原创]Saltstack学习笔记:命令参数详解以及配置文件说明
很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...
- Laravel学习笔记汇总——Collection方法详解
## Laravel学习笔记汇总--Collection方法详解 本文参考:https:// laravel.com/docs/8.x/collections // 返回整个底层的数组 collect ...
- UINavigationController导航控制器详解
1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控 ...
- Android学习笔记——Android 签名机制详解
Android 签名机制详解 近期由于工作需要在学习 Android 的签名机制,因为没有现成资料,只能通过开发者文档和阅读博客的方式对 Android 签名机制进行大致了解.过程中查阅到的资料相对零 ...
- [学习笔记] 伸展树splay详解+全套模板+例题[Luogu P3369 【模板】普通平衡树]
文章目录 引入概念 全套模板 变量声明 update ==rotate旋转== splay操作 insert插入 delete删除 查找x的位置 查找第k大 前驱/后继 极小值-inf和极大值inf的 ...
最新文章
- 二层交换机、三层交换机与路由器的比较
- python修改字典某一项的函数_python – 更改字典作为函数的全局范围
- (原+转)ubuntu14中结束多个caffe进程中的某个
- 弄懂CNN,然后提升准确率4.21-4.27
- 【ubuntu】ubuntu18.04:在处理时有错误发生:ufw E: Sub-process /usr/bin/dpkg returned an error code (1)
- 信息系统服务器数量设置,《系统下服务器设置与优化.doc
- matplotlib中文乱码问题_MacOS解决Matplotlib的中文乱码问题
- Android给力模拟器,秒杀原生模拟器到渣
- Android ViewPager多页面滑动切换以及动画效果
- Thinking in Java 11.3 添加一组元素
- opencv 学习之 亮度检测
- 国内外有哪些有前景的 AR VR公司?
- Matlab的复共轭转置
- MRP系统运行计算逻辑浅析
- 不要被意外牵着鼻子走
- 论“女生不适合当程序员”
- Elasticsearch启动报错:warning: ignoring JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191; using bundled JDK
- java+url+空格转码_Web里URL空格的转换方法
- 看完《四海》,我只有一肚子的槽想吐
- js 将金额转换成大写汉字
热门文章
- XDAG iOS钱包Beta版本发布
- hibernate 中 Provided id of the wrong type for class 异常
- linux匿名工具,NeoLoader一款匿名去中心化的BT/eMule/网盘文件共享下载工具,支持win、mac、linux...
- aaaaaaaaaaA heH heH nuN
- Star CCM+相关资料分享
- 虚拟服务器显卡设置,PVE开启显卡虚拟化intel GVT-g
- 鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统
- 51单片机直流电机调速c语言,51单片机直流电机调速程序
- python音乐可视化_Python数据可视化:网易云音乐歌单
- PPT动画教程:插入声音(转)