亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

UIKit框架(11)導航控制器UINavigationController

發布時間:2020-06-13 12:36:22 來源:網絡 閱讀:1133 作者:ymanmeng123 欄目:移動開發

介紹多控制器管理中非常重要的一個控制器UINavigationController

它負責管理多個控制器,能夠輕松完成控制器間的切換

如:iOS系統上的設置

    UIKit框架(11)導航控制器UINavigationController


父類是UIViewController,但其功能并非是管理view,而是管理多個控制器


控制器棧式管理: 

     當切換時,將一個控制器入棧,當返回時,棧頂控制器出棧

     當前顯示的永遠是棧頂控制器的view,棧結構如下:

@property(nonatomic, copy) NSArray *viewControllers  //管理的所有控制器     
@property(nonatomic, readonly, retain) UIViewController *topViewController //當前顯示的控制器


  • 代碼使用導航控制器

導航控制器的創建:

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController

     rootViewController參數:根控制器,即管理的第一個頁面


跳轉動作:

     使用導航控制器的pushViewController方法:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

     也就是說,跳轉動作的執行者是導航控制器,而不是源控制器

     源控制器可以通過它的屬性訪問到導航控制器:

@property(nonatomic, readonly, retain) UINavigationController*navigationController

     如一個跳轉動作:

AMViewController *vc = [[AMViewControllerTwo alloc] init];
[self.navigationController pushViewController:vc animated:YES];

     

返回動作:

     非根控制器的導航欄上,都默認有一個返回按鈕,點擊此按鈕能夠自動返回

     也可以通過代碼返回,導航控制器的方法:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated //返回一個控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated //返回到指定控制器
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated //返回到根控制器




  • storyboard使用導航控制器

     UIKit框架(11)導航控制器UINavigationController

刪除storyboard默認的控制器,添加 UINavigationController,并設置為初始控制器。

     UIKit框架(11)導航控制器UINavigationController

添加一個控制器,連接導航控制器的root view controller屬性

     UIKit框架(11)導航控制器UINavigationController

控制器間的跳轉可以直接連線,選擇show

     UIKit框架(11)導航控制器UINavigationController

     同樣支持自動型Segue和手動型Segue

     控制器之間傳遞數據和modal方式切換一樣


導航欄上按鈕的添加

    導航欄上的按鈕類型是UIBarButtonItem

     UIKit框架(11)導航控制器UINavigationController

     

  • 導航欄

導航控制器除了管理多個控制器外,還有一個到導航欄,相關屬性:

@property(nonatomic, readonly) UINavigationBar *navigationBar  //導航欄
@property(nonatomic, getter=isNavigationBarHidden) BOOL navigationBarHidden //導航欄隱藏使能


導航欄上的數據由UINavigationItem對象管理,其屬性如下:

@property(nonatomic, copy) NSString *title  //中間的標題
@property(nonatomic, retain) UIView *titleView //中間的視圖
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem //左側的返回按鈕
@property(nonatomic, retain) UIBarButtonItem *leftBarButtonItem //左側自定義按鈕
@property(nonatomic, copy) NSArray *leftBarButtonItems 
@property(nonatomic, retain) UIBarButtonItem *rightBarButtonItem //右側自定義按鈕
@property(nonatomic, copy) NSArray *rightBarButtonItems

導航欄對象UINavigationBar管理顯示數據的方式和導航控制器管理多個控制器類似,也是用棧的結構:

@property(nonatomic, copy) NSArray *items
@property(nonatomic, readonly, retain) UINavigationItem *topItem

但通常不直接使用導航欄對象來設置顯示的數據

UIViewController包含一個navigationItem屬性:

@property(nonatomic, readonly, retain) UINavigationItem *navigationItem

     通過這個屬性,能夠直接設置當前頁面的導航欄數據


  • 工具欄

導航控制器還管理著一個工具欄,這個工具欄默認是隱藏的

@property(nonatomic, readonly) UIToolbar *toolbar
- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated
@property(nonatomic, getter=isToolbarHidden) BOOL toolbarHidde

    UIKit框架(11)導航控制器UINavigationController

     

工具欄UIToolBar管理方式導航欄UINavigationBar的管理方式類似

UIViewController包含一個tabBarItem屬性:

@property(nonatomic, readonly, retain) UINavigationItem *navigationItem

     通過這個屬性,能夠直接設置當前頁面的工具欄數據

@property(nonatomic, retain) UITabBarItem *tabBarItem



  • 導航控制器子類

定義一個導航控制器子類的好處是:

     讓項目中所有的導航控制器都遵循統一的一些行為,應讓所有的導航控制器為自定義的UINavigationController的子類,在子類中設定這些統一的行為。


UINavigationBar設置背景圖片   

- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics


UINavigationBar設置文字屬性     

@property(nonatomic, copy) NSDictionary *titleTextAttributes


一些控件遵循<UIAppearance>協議,通過協議中的appearance方法能夠返回全局對象

+ (instancetype)appearance

通過全局對象能夠設置一些全局的特征

設置導航欄的tintColor

[UINavigationBar appearance].tintColor = [UIColor whiteColor];

設置導航欄按鈕的字體

[UIBarButtonItem appearance] setTitleTextAttributes:attrDict forState:UIControlStateNormal];


    全局的屬性設置,執行一次即可

    將這些代碼放在導航控制器的viewDidLoad方法中,當出現多個導航控制器時,全局屬性設置會執行多次。

     保證全局屬性只執行一次的方案是添加到initialize方法中


另外可以使用一個類,管理所有UIKit對象的appearance的設置,用以實現App皮膚的切換





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莒南县| 会泽县| 靖远县| 斗六市| 会东县| 隆昌县| 云浮市| 长治市| 辽中县| 阿坝| 南川市| 林口县| 德阳市| 浦城县| 锡林郭勒盟| 玉树县| 土默特左旗| 嘉峪关市| 平顺县| 浙江省| 永泰县| 邵武市| 宣恩县| 潞西市| 龙门县| 济源市| 蒙城县| 江西省| 商都县| 邯郸市| 崇州市| 如东县| 涞水县| 林周县| 松溪县| 武川县| 安康市| 平邑县| 南投县| 安庆市| 芦山县|