[整理]swift中的UINavigationController UINavigationItem UINavigationBar UIBarButtonItem

抽空要去看:

UINavigationController vs UINavigationItem vs UINavigationBar vs UIBarButtonItem

先说类的关系:
-》
-》
-》
-》
再去总结:
总体逻辑关系是:
UINavigationController:管理UINavigationBar,默认自动生成一个UINavigationBar
-》UINavigationBar:其中管理和显示的是UINavigationItem
-》UINavigationItem:其中管理和显示一堆的按钮(返回,取消,完成等等)和视图(中间的标题等),每个按钮或视图都是一个UIBarButtonItem
-》UIBarButtonItem:支持生成系统自带的类型的导航栏上面的按钮,也支持自定义自己的视图的按钮
再详细解释每个类型:

UINavigationController

管理和使用导航栏
其中有个UINavigationBar
一般都是直接使用UINavigationController
继承UINavigationController去实现自己特定的UINavigationController,不是很多
导航堆栈
第一个视图控制器:根视图控制器
最后一个视图控制器:当前的视图控制器
通过Segue或对应的方法,去push添加或pop移除,对应的视图控制器
顶部是导航栏:navigation bar
底部,可能还有个,工具栏:toobar
可以通过toolbarHidden设置为false而显示出对应的工具栏
不能直接设置导航栏的 frame,bounds, alpha
可以通过navigationBarHidden或 setNavigationBarHidden:animated:去显示或隐藏导航栏

UINavigationBar

可以单独使用,也可以和UINavigationController配合使用
最常见的是和UINavigationController一起使用
UINavigationBar提供了个堆栈方式(push或pop)去管理UINavigationItem
-》UINavigationItem在UINavigationBar中显示

UINavigationItem

UINavigationItem用于管理UINavigationBar上面显示的按钮和视图
想要在导航栏上面画视图,即添加按钮,视图的话,则需要:
先有个UINavigationItem,UINavigationItem中包含了对应的按钮和视图,
然后UINavigationItem才能被放到导航栏堆栈中
UINavigationItem自己内部有很多常用的属性:
leftBarButtonItem,leftBarButtonItems:用于存放左边的,单个或多个按钮
backBarButtonItem:用于表示,最左边的,那个返回按钮-》当前视图控制器,是在最上面的的下面一层的时候-》当前视图是最顶层的话,则是不显示的
而想要向UINavigationItem添加按钮和视图的话,则用UIBarButtonItem

UIBarButtonItem

初始化UIBarButtonItem的时候,就可以:
使用系统自带的已经定义好的各种类型的文字和图标的按钮:init(barButtonSystemItem:target:action:)
自定定义对应的
文字:init(title:style:target:action:)
或图片:init(image:style:target:action:)
或完全自定义的视图:init(customView:)


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量