UI進階--UINavigationController簡單介紹


  • 一個iOS的app很少只由一個控制器組成,除非這個app極其簡單。
  • 當app中有多個控制器的時候,我們就需要對這些控制器進行管理。
  • 有多個view時,可以用一個大的view去管理1個或者多個小view
  • 控制器也是如此,用1個控制器去管理其他多個控制器
  • 比如,用一個控制器A去管理3個控制器B、C、D
  • 控制器A被稱為控制器B、C、D的“父控制器
  • 控制器B、C、D的被稱為控制器A的“子控制器
為了便於管理控制器,iOS提供了2個比較特殊的控制器
UINavigationController
UITabBarController
 
在iOS中,利用UINavigationController,可以輕松地管理多個控制器,輕松完成控制器之間的切換,典型例子就是系統自帶的“設置”應用:
 
UINavigationController的使用步驟:
1、初始化UINavigationController;
1 UINavigationController *nav = [[UINavigationController alloc] init];
2、設置UIWindow的rootViewController為UINavigationController;
1 window.rootViewController = nav;
2  [window makeKeyAndVisible];
3、根據具體情況,通過push方法添加對應個數的子控制器;
1 [self.navigationController pushViewController:OneViewController animated:YES];//假設已初始化一個名為OneViewController的子控制器

 

UINavigationController的子控制器:

 1 //UINavigationController以棧的形式保存子控制器
 2 @property(nonatomic,copy) NSArray *viewControllers;
 3 @property(nonatomic,readonly) NSArray *childViewControllers;
 4 
 5 //使用push方法能將某個控制器壓入棧
 6 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; 
 7 
 8 //使用pop方法可以移除控制器
 9 //將棧頂的控制器移除
10 - (UIViewController *)popViewControllerAnimated:(BOOL)animated;
11 //回到指定的子控制器
12 - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
13 //回到根控制器(棧底控制器)
14 - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

初始化UINavigationController時,可以通過initWithRootViewController:方法傳入一個控制器作為根控制器,這個根控制器永遠處於棧底(如果棧中只有一個對象,那么根控制器也處於棧頂)。

如何修改導航欄的內容:

 1 //導航欄的內容由棧頂控制器的navigationItem屬性決定
 2 
 3 //UINavigationItem有以下屬性影響着導航欄的內容
 4 //左上角的返回按鈕
 5 @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
 6 //中間的標題視圖
 7 @property(nonatomic,retain) UIView          *titleView;
 8 //中間的標題文字
 9 @property(nonatomic,copy)   NSString        *title;
10 //左上角的視圖
11 @property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
12 //右上角的視圖
13 @property(nonatomic,retain)UIBarButtonItem *rightBarButtonItem  

 

一些注意點:

1、在當前的導航控制器設置返回按鈕,只是設置下一個導航控制器的返回按鈕。

2、設置導航控制器的返回按鈕,自定義一個按鈕或者設置返回按鈕的圖片也是無效的,如要自定義,那么可以通過設置導航控制器的左邊按鈕來替換。

3、在storyboard中設置導航控制器時,使用push連接是ios 5之前的用法,會自動生成導航標題欄,而ios 6 之后是用show連接,不會生成導航標題欄,如要設置,可以直接拖控件。

4、導航控制器添加的第一個視圖控制器是根控制器,是永遠都不會從棧堆中彈出的。

5、源視圖控制器和目的視圖控制器是通過sugue連接的。(例如:第一個視圖控制器sugue到第二個視圖控制器)

 

6、如果視圖控制器從棧中移除后,會銷毀,調用dealloc方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM