簡(jiǎn)述
它以棧的形式管理視圖控制器话告,push和pop(釋放掉VC)方法來(lái)彈入彈出控制器,只能顯示處于棧頂?shù)囊晥D控制器诺擅。
代理方法
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
結(jié)構(gòu)
組成部分
UINavigationBar
UINavigationItem
UIBarButtonItem
UIToolbar
關(guān)系
1.NavigaitonBar
管理navigationItem
底哥,只要一個(gè)視圖控制器改變了UINavigationBar的屬性則影響是全局的脉漏。系統(tǒng)會(huì)以懶加載的方式創(chuàng)建一個(gè)五嫂。
2.UINavigationItem
顯示在UINavigationBar
中颗品,改變UINavigationItem
只會(huì)在當(dāng)前控制器起作用,不會(huì)影響其它控制器沃缘。
3.Toolbar
顯示在屏幕底部躯枢,是導(dǎo)航控制器的工具欄。
4.UIBarButtonItem
是UINavigationItem
或者Toolbar
具體的一個(gè)按鈕槐臀。
常用方法
/// 當(dāng)前管理的所有的控制器
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
/// 棧頂控制器
@property(nullable, nonatomic,readonly,strong) UIViewController *topViewController;
/// 當(dāng)前可見(jiàn)的VC锄蹂,可能是topViewController,也可能是當(dāng)前topViewController present(modal)出來(lái)的VC水慨,總而言之就是可見(jiàn)的VC
@property(nullable, nonatomic,readonly,strong) UIViewController *visibleViewController;
一得糜、UINavigationBar
- UINavigationController是UINavigationBar的delegate, 其負(fù)責(zé)響應(yīng)該UINavigationBarDelegate的代理方法, 并據(jù)此更新位于界面中間部分的UIViewController的視圖。
屬性
//外觀
navigationController.navigationBar.barStyle = UIBarStyleDefault;
//隱藏狀態(tài)
navigationController.navigationBarHidden = YES;
方法
//隱藏動(dòng)畫
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated;
二晰洒、UIToolbar
- UIToolbar是底部工具欄朝抖,允許開(kāi)發(fā)者通過(guò)該屬性設(shè)置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;
// 橫屏隱藏(此時(shí)輕拍顯示)、豎屏顯示
@property(nonatomic, readwrite, assign) BOOL hidesBarsWhenVerticallyCompact;
// 鍵盤出現(xiàn)隱藏捉蚤、鍵盤消失保持隱藏(此時(shí)輕拍顯示)
@property(nonatomic, readwrite, assign) BOOL hidesBarsWhenKeyboardAppears;
// 示例
navigationController.hidesBarsOnTap = YES;
三抬驴、UIToolbar
- UINavigationBar通過(guò)UINavigationItem堆棧按照如下方式來(lái)決定展示在UINavigationBar中的內(nèi)容
屬性
@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;
//設(shè)置左側(cè)按鈕是否與返回按鈕共同存在
@property(nonatomic) BOOL leftItemsSupplementBackButton;