一、基本概念
二、属性
- (instancetype)initWithRootViewController:(UIViewController *)rootViewController;
2. 初始化 UINavigationController 对象并使用指定的 导航栏和工具栏
- (instancetype)initWithNavigationBarClass:(nullable Class)navigationBarClass toolbarClass:(nullable Class)toolbarClass;
3. 将指定视图控制器对象压入 UINavigationController 对象的栈并设置动画效果
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
4. 将当前视图控制器对象出栈并返回该视图控制器对象,同时设置动画效果,当前的视图控制器对象会被释放
- (nullableUIViewController *)popViewControllerAnimated:(BOOL)animated;
5. 将当前的视图控制器对象全部出栈,直到 根视图控制器对象,同时设置动画效果,
- (nullableNSArray<__kindofUIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated;
6. 使指定的视图控制器对象出栈,并设置动画效果,指定的视图控制器与当前的视图控制之间的全部被释放,返回所有出栈的视图控制器对象
- (nullableNSArray<__kindofUIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
7. 保存栈顶的视图控制器对象
@property(nullable,nonatomic,readonly,strong)UIViewController *topViewController;
8. 如果模态 ViewController 存在,返回模态 ViewController,否则返回 栈顶 ViewController
@property(nullable,nonatomic,readonly,strong)UIViewController *visibleViewController;
9. UINavigationController 对象的栈数组
@property(nonatomic,copy)NSArray<__kindofUIViewController *> *viewControllers;
10. 设置 UINavigationController 对象的栈的内容,并设置动画效果
- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated
可以通过此方法一次性将多个视图控制器压入栈
11. 判断导航栏是否隐藏
@property(nonatomic,getter=isNavigationBarHidden)BOOL navigationBarHidden;
12. 设置导航栏是否隐藏,并设置动画效果
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated;
13. 获得 UINavigationController 对象的导航栏对象
@property(nonatomic,readonly)UINavigationBar *navigationBar;
14. 判断工具栏是否隐藏;默认为 YES,即隐藏
@property(nonatomic,getter=isToolbarHidden)BOOL toolbarHidden;
15. 设置工具栏是否隐藏,并设置动画效果
- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated;
16. 获取 UINavigationController 对象的工具栏对象
@property(null_resettable,nonatomic,readonly)UIToolbar *toolbar;
17. 代理属性
@property(nullable,nonatomic,weak)id<UINavigationControllerDelegate> delegate;
18. 获取手势对象
@property(nullable,nonatomic,readonly)UIGestureRecognizer *interactivePopGestureRecognizer;
以下的属性在 iOS 8 之后才有
19. 设置弹出键盘时是否隐藏导航栏
@property (nonatomic,readwrite,assign)BOOL hidesBarsWhenKeyboardAppears;
20. 设置屏幕滑动的时候是否隐藏导航栏和工具栏;一般用户 UITableView 中的滑动
@property (nonatomic,readwrite,assign)BOOL hidesBarsOnSwipe;
21. 当用户滑动隐藏导航栏或工具栏的手势对象
@property (nonatomic,readonly,strong)UIPanGestureRecognizer *barHideOnSwipeGestureRecognizer;
22. 设置横屏时是否隐藏导航栏和工具栏
@property (nonatomic,readwrite,assign)BOOL hidesBarsWhenVerticallyCompact;
23. 设置是否点击就隐藏导航栏和工具栏
@property (nonatomic,readwrite,assign)BOOL hidesBarsOnTap;
24. 当用户点击隐藏导航栏和工具栏的手势对象
@property (nonatomic,readonly,assign)UITapGestureRecognizer *barHideOnTapGestureRecognizer;
三、UINavigationControllerDelegate
1. 当 UINavigationController 对象将要显示一个视图控制器对象的视图时调用
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
2. 当 UINavigationController 对象已经显示一个视图控制器对象的视图时调用
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
3. 设置 UINavigationController 对象支持id设备方向
- (UIInterfaceOrientationMask)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController;
4. 设置 UINavigationController 对象首选支持的设备方向
- (UIInterfaceOrientation)navigationControllerPreferredInterfaceOrientationForPresentation:(UINavigationController *)navigationController;
四、分类 UIViewController (UINavigationControllerItem)
1. 获取当前视图控制器的对象的 导航项对象(设置标题、按钮等都需要从这个属性获取)
@property(nonatomic,readonly,strong)UINavigationItem *navigationItem;
2. 获取当前视图控制器对象所在的 UINavigationController 对象
@property(nullable,nonatomic,readonly,strong)UINavigationController *navigationController;
五、分类 UIViewController (UINavigationControllerContextualToolbarItems)
@property (nullable,nonatomic,strong)NSArray<__kindofUIBarButtonItem *> *toolbarItems
2. 设置工具栏的按钮并设置动画效果
- (void)setToolbarItems:(nullableNSArray<UIBarButtonItem *> *)toolbarItems animated:(BOOL)animated;