iOS——导航栏UINavigationController

一、基本概念

1. UINavigationController 对象可以使相互有关联的视图控制器对象显示在屏幕上

2. UINavigationController 对象以栈的形式保存所有的视图控制器对象;栈是一个数组对象,一个视图控制器对象对应一个屏幕,只有位于栈顶的视图控制器对象才能够显示在屏幕上

3. 初始化 UINavigationController 对象时,可以传入一个 视图控制器对象,这个 视图控制器对象 就是 UINavigationController 对象的 根视图控制器对象,且 根视图控制器对象永远位于栈底

4. 将某个 视图控制器对象 压入 UINavigationController 对象的栈时,新加入的视图控制器对象的视图会从窗口右侧推入;将某个视图控制器对象出栈时,出栈的视图控制器对象会从窗口右侧推出,然后用户就能看见仅次于栈顶的视图控制器对象的视图

5. UINavigationController 是 UIViewController 的子类,所以也有 view 属性;view 属性视图指向两个子视图,一个是 UINavigationBar 对象,一个是 topViewController 对象(指向位于栈顶的视图控制器对象)

二、属性

1. 初始化 UINavigationController 对象并设置 根视图控制器

- (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)

1. 保存工具栏的按钮

@property (nullable,nonatomic,strong)NSArray<__kindofUIBarButtonItem *> *toolbarItems 


2. 设置工具栏的按钮并设置动画效果

- (void)setToolbarItems:(nullableNSArray<UIBarButtonItem *> *)toolbarItems animated:(BOOL)animated;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值