UINavigationController

简述

它以栈的形式管理视图控制器,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.UIBarButtonItemUINavigationItem或者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 *leftBarButtonItems;
@property(nonatomic, strong) UIBarButtonItem *rightBarButtonItem;
@property(nonatomic, copy) NSArray *rightBarButtonItems;
//设置左侧按钮是否与返回按钮共同存在
@property(nonatomic) BOOL leftItemsSupplementBackButton;

你可能感兴趣的:(UINavigationController)