简述
它以栈的形式管理视图控制器,push和pop(释放掉VC)方法来弹入弹出控制器,只能显示处于栈顶的视图控制器。
代理方法
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
结构
组成部分
UINavigationBar
UINavigationItem
UIBarButtonItem
UIToolbar
关系
1.NavigaitonBar
管理navigationItem
,只要一个视图控制器改变了UINavigationBar的属性则影响是全局的。系统会以懒加载的方式创建一个。
2.UINavigationItem
显示在UINavigationBar
中,改变UINavigationItem
只会在当前控制器起作用,不会影响其它控制器。
3.Toolbar
显示在屏幕底部,是导航控制器的工具栏。
4.UIBarButtonItem
是UINavigationItem
或者Toolbar
具体的一个按钮。
常用方法
/// 当前管理的所有的控制器
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
/// 栈顶控制器
@property(nullable, nonatomic,readonly,strong) UIViewController *topViewController;
/// 当前可见的VC,可能是topViewController,也可能是当前topViewController present(modal)出来的VC,总而言之就是可见的VC
@property(nullable, nonatomic,readonly,strong) UIViewController *visibleViewController;
一、UINavigationBar
- UINavigationController是UINavigationBar的delegate, 其负责响应该UINavigationBarDelegate的代理方法, 并据此更新位于界面中间部分的UIViewController的视图。
属性
//外观
navigationController.navigationBar.barStyle = UIBarStyleDefault;
//隐藏状态
navigationController.navigationBarHidden = YES;
方法
//隐藏动画
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated;
二、UIToolbar
- UIToolbar是底部工具栏,允许开发者通过该属性设置UIToolbar的外观
属性
navigationController.toolbar.barStyle = UIBarStyleDefault;
navigationController.toolbarHidden = NO;
方法
- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated;
// 轻拍隐藏、再次轻拍显示
@property(nonatomic, readwrite, assign) BOOL hidesBarsOnTap;
// 向上轻扫隐藏、向下轻扫显示
@property(nonatomic, readwrite, assign) BOOL hidesBarsOnSwipe;
// 横屏隐藏(此时轻拍显示)、竖屏显示
@property(nonatomic, readwrite, assign) BOOL hidesBarsWhenVerticallyCompact;
// 键盘出现隐藏、键盘消失保持隐藏(此时轻拍显示)
@property(nonatomic, readwrite, assign) BOOL hidesBarsWhenKeyboardAppears;
// 示例
navigationController.hidesBarsOnTap = YES;
三、UIToolbar
- UINavigationBar通过UINavigationItem堆栈按照如下方式来决定展示在UINavigationBar中的内容
属性
@property(nonatomic, copy) NSString *title;
@property(nonatomic, strong) UIView *titleView;
//提示文字
@property(nonatomic, copy) NSString *prompt;
//返回按钮
@property(nonatomic, strong) UIBarButtonItem *backBarButtonItem;
@property(nonatomic, assign) BOOL hidesBackButton;
@property(nonatomic, strong) UIBarButtonItem *leftBarButtonItem;
@property(nonatomic, copy) NSArray<UIBarButtonItem *> *leftBarButtonItems;
@property(nonatomic, strong) UIBarButtonItem *rightBarButtonItem;
@property(nonatomic, copy) NSArray<UIBarButtonItem *> *rightBarButtonItems;
//设置左侧按钮是否与返回按钮共同存在
@property(nonatomic) BOOL leftItemsSupplementBackButton;