UI整理-----part8--导航控制器(navigationController)
---恢复内容开始---
(1)UINavigationController通常被称作导航控制栏,是视图与视图之间沟通联系的桥梁,是个类的控制器,用来管理试图控制器的切换,导航栏是一个导航控制器共用的。
(2)导航控制器用来管理其他控制器显示视图,本身是不显示视图内容的。
(3)导航控制器主要用来控制多控制器的连续切换
(4)U
---恢复内容结束---
(1)UINavigationController通常被称作导航控制栏,是视图与视图之间沟通联系的桥梁,是个类的控制器,用来管理试图控制器的切换,导航栏是一个导航控制器共用的。
(2)导航控制器用来管理其他控制器显示视图,本身是不显示视图内容的。
(3)导航控制器主要用来控制多控制器的连续切换
(4)UINavigationController继承于UIViewController,以栈的方式管理所控制的视图控制器,至少要有一个被管理的视图控制器,这个控制器称作导航控制器的根视图控制器。任何继承自UIViewController的类(多态)都可以作为根视图控制器。
(5)UINavigationController的ControllersView里始终显示栈顶端控制器的View
(6)ViewControllers属性存储了栈中所有被管理的控制器。
(7)navigationController属性是父类中的属性,每一个在栈中的控制器都能通过此属性获取自己所在的UINavigationController对象。
(8)出栈和入栈的方法:
<1>- (void)pushViewController:(UIViewController *)viewControlleranimated:(BOOL)animated; 进入下一个试图控制器
<2>- (nullableUIViewController *)popViewControllerAnimated:(BOOL)animated; 返回上一个视图控制器
<3>- (nullableNSArray<__kindofUIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated; 返回到指定的试图控制器
<4>- (nullableNSArray<__kindofUIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated; 返回到根视图控制器
(9)初始化的具体过程:
(10)常用属性:
<1>@property(nonatomic,copy) NSArray<__kindofUIViewController *> *viewControllers; 所有处于栈中的控制器
<1>@property(nullable, nonatomic,readonly,strong) UIViewController *topViewController; 位于栈顶的控制器
<1>@property(nullable, nonatomic,readonly,strong) UIViewController *visibleViewController; 当前正在显示的控制器
<1>@property(nonatomic,readonly) UINavigationBar *navigationBar; 导航条
(11)UINavigationBar:navigationBar 导航条 iOS7以后默认是透明的,以前默认是不透明的,navigationBar在透明情况下与contentView会重合一部分区域,在不透明情况下,contentView跟在navigationBar下面,navigationBar竖屏状态下默认高度44,横屏下默认32。
(12)注意:
<1>不管是在哪个ViewController里更改self.navigationController属性,他们都是更改的同一个导航控制器。
<2>设置导航栏的时候一定要self.navigationController.navigationBar(作用全局)。
<3>导航项(item)仅作用于单个界面,是各自管理的。
(13)导航栏属性的学习
<1>常用属性:
self.navigationController.navigationBar._______
@property(nonatomic,assign,getter = isTranslucent) BOOL translucent; 设置属性为透明或半透明,默认半透明(设置颜色后失效)
@property(nullable, nonatomic,strong) UIColor *barTintColor;设置导航栏的颜色,默认为nil
self.navigationController._______
@property(nonatomic,getter=isNavigationBarHidden) BOOL navigationBarHidden; 隐藏导航栏
@property(nonatomic,getter=isToolbarHidden) BOOLtoolbarHidden; toolBar(工具栏) 的隐藏状态,默认为YES;
<2>设置导航栏背景图片,设置以后不会显示透明状态:
self.navigationController.navigationBar._______
- (nullable UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics;
typedefNS_ENUM(NSInteger, UIBarMetrics) {
UIBarMetricsDefault, 竖屏时UINavigationBar标准的尺寸显示NavigationBar
UIBarMetricsCompact,
UIBarMetricsDefaultPrompt = 101,
UIBarMetricsLandscapePhone NS_ENUM_DEPRECATED_IOS(5_0, 8_0, "UseUIBarMetricsCompactinstead") = UIBarMetricsCompact, 横屏时UINavigationBar标准的尺寸显示NavigationBar
UIBarMetricsLandscapePhonePrompt NS_ENUM_DEPRECATED_IOS(7_0, 8_0, "UseUIBarMetricsCompactPrompt") = UIBarMetricsCompactPrompt,
};
<3>UINavigationControllerDelegate:self.navigationController.delegate = self
- (void)navigationController:(UINavigationController *)navigationControllerwillShowViewController:(UIViewController *)viewControlleranimated:(BOOL)animated; 导航控制器即将显示视图控制器
- (void)navigationController:(UINavigationController *)navigationControllerdidShowViewController:(UIViewController *)viewControlleranimated:(BOOL)animated; 导航控制器已经显示视图控制器
(14)导航项:@property(nonatomic,readonly,strong) UINavigationItem *navigationItem
<1>@property(nullable, nonatomic,copy)NSString *title; 给中间的title设置内容
<2>创建自定义标题
UIBarButtonItem *item = [[UIBarButtonItemalloc] initWithTitle:<#(nullableNSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullableid)#> action:<#(nullableSEL)#>];
typedefNS_ENUM(NSInteger, UIBarButtonItemStyle) {
UIBarButtonItemStylePlain,
UIBarButtonItemStyleBordered,
UIBarButtonItemStyleDone,
}; UIBarButtonItemStylePlain 和 UIBarButtonItemStyleBordered 效果看起来一样
<3>创建系统推荐样式的导航项:
UIBarButtonItem *item = [[UIBarButtonItemalloc] initWithBarButtonSystemItem:<#(UIBarButtonSystemItem)#> target:<#(nullableid)#> action:<#(nullableSEL)#>];
按钮样式有:
typedefNS_ENUM(NSInteger, UIBarButtonSystemItem) {
UIBarButtonSystemItemDone, 蓝色文字按钮,标有“done”
UIBarButtonSystemItemCancel, 文字按钮,标有“cancel”
UIBarButtonSystemItemEdit, 文字按钮,标有“Edit”
UIBarButtonSystemItemSave, 蓝色文字按钮,标有“Save”
UIBarButtonSystemItemAdd, 图像按钮,上有一个add符号
UIBarButtonSystemItemFlexibleSpace, 空白,占有空间大小可变
UIBarButtonSystemItemFixedSpace, 空白占位符
UIBarButtonSystemItemCompose, 图像按钮,上有一张纸和一支笔
UIBarButtonSystemItemReply, 图像按钮,上有一个回复箭头
UIBarButtonSystemItemAction, 图像按钮,上有一个动作箭头
UIBarButtonSystemItemOrganize, 图像按钮,上有一个文件夹及向下箭头
UIBarButtonSystemItemBookmarks, 图像按钮,上有书签图标
UIBarButtonSystemItemSearch, 图像按钮,上有spotlight图标
UIBarButtonSystemItemRefresh, 图像按钮,上有环形的刷新箭头
UIBarButtonSystemItemStop, 图像按钮,上有一个停止记号 “×”
UIBarButtonSystemItemCamera, 图像按钮,上有一个照相机
UIBarButtonSystemItemTrash, 图像按钮,上有一个垃圾桶
UIBarButtonSystemItemPlay, 图像按钮,上有一个播放图标
UIBarButtonSystemItemPause, 图像按钮,上有一个暂停图标
UIBarButtonSystemItemRewind, 图像按钮,上有一个倒带图标
UIBarButtonSystemItemFastForward, 上有一个快进图标
UIBarButtonSystemItemUndo NS_ENUM_AVAILABLE_IOS(3_0),
UIBarButtonSystemItemRedo NS_ENUM_AVAILABLE_IOS(3_0),
UIBarButtonSystemItemPageCurl NS_ENUM_AVAILABLE_IOS(4_0),
};
<4>自定义视图按钮
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:<#(UIBarButtonSystemItem)#> target:<#(nullableid)#> action:<#(nullableSEL)#>];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(<#CGFloatx#>, <#CGFloaty#>, <#CGFloatwidth#>, <#CGFloatheight#>);
[button setImage:<#(nullableUIImage *)#> forState:<#(UIControlState)#>];
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = item;( 也可以是@[button1,button2])