亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

[iOS基礎控件-6.11.2]-UINavigationController多控制器簡單使用

2019-11-14 19:43:34
字體:
來源:轉載
供稿:網友
A.概念
1.通常一個app有多個控制器
2.需要對這些控制器進行管理
3.有多個view的時候,用一個父view去管理多個子view
4.控制器管理也是如此,使用給一個父控制器,去控制子控制器
 
為了方便管理控制器,系統提供了兩個控制器
  • UINavigationController
  • UITabBarController
 
B.UINavigationController的使用
UINavigationController的使用步驟
初始化UINavigationController
設置UIWindow的rootViewController為UINavigationController
根據具體情況,通過push方法添加對應個數的子控制器
 
1.初始化
2.設置為rootViewController
 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2     // 設置window 3     self.window = [[UIWindow alloc] init]; 4     self.window.frame = [[UIScreen mainScreen] bounds]; 5     self.window.backgroundColor = [UIColor grayColor]; // window是灰色背景 6     [self.window makeKeyAndVisible]; 7     8     9     // 設置UINavigationController10     UINavigationController *nvController = [[UINavigationController alloc] init];11     nvController.view.backgroundColor = [UIColor blueColor]; // 設置藍色背景12     self.window.rootViewController = nvController;13    14     return YES;15 }
 
3.通過push方法,增加子控制器
(1)創建3個控制器和綁定的xib文件
Image(215)
 
 
(2)一次push進navigationController的子控制器棧
 1     // 配置第一個子控制器 2     ViewControllerOne *vc1 = [[ViewControllerOne alloc] init]; 3     [nvController pushViewController:vc1 animated:YES]; 4     5     // 配置第二個子控制器 6     ViewControllerTwo *vc2 = [[ViewControllerTwo alloc] init]; 7     [nvController pushViewController:vc2 animated:YES]; 8     9     // 配置第三個子控制器,這是棧頂的控制器10     ViewControllerThree *vc3 = [[ViewControllerThree alloc] init];11     [nvController pushViewController:vc3 animated:YES];
 
(3)顯示的是棧頂控制器的view
Image(216)
 
C.子控制器的管理原理
1.導航條在狀態欄(高度20)下,高度44
1 - (void)applicationDidBecomeActive:(UIApplication *)application {2     // 必須在加載完畢激活app后,所有的view的尺寸位置才能確定3     UINavigationController *nvController = (UINavigationController *)self.window.rootViewController;4     NSLog(@"%@", NSStringFromCGRect(nvController.view.frame)); // 整個導航控制器的frame5     NSLog(@"%@", NSStringFromCGRect(nvController.navigationBar.frame)); // 導航條的frame6 }7  
out:
NavigationController[2669:183137] {{0, 0}, {320, 480}}
2014-12-19 21:16:30.413 NavigationController[2669:183137] {{0, 20}, {320, 44}}
 
2.UINavigationController有一個子控制器的棧,使用push方法就是往棧里面添加子控制器
1 @PRoperty(nonatomic,copy) NSArray *viewControllers; // The current view controller stack.
 
3.push子控制器的同時,替換window上的view,顯示的總是棧頂控制器的view
1 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; // Uses a horizontal slide transition. Has no effect if the view controller is already in the stack.
 
D.子控制器棧的操作
1.棧和添加子控制器
(1)使用"pushViewController"
1     // 配置第一個子控制器2     ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];3     [nvController pushViewController:vc1 animated:YES];
 
(2)使用 "addChildController"
  • UINavigationController中的”viewControllers"成員是一個數組,就是子控制器棧
  • "childViewControllers"的功能也是一樣的(這是UIViewController的成員屬性)
  • "addChildController"和"pushViewController"的功能一樣(這是UIViewController的方法)
 
    // 配置第一個子控制器
1     ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];2     [nvController addChildViewController:vc1];
 
(3)直接放入viewControllers數組
1     // 配置第一個子控制器2     ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];3     nvController.viewControllers = @[vc1];
 
(4)初始化的時候指定rootViewController
1     // 傳入一個viewController作為 nvController的 rootViewController2     nvController = [[UINavigationController alloc] initWithRootViewController:vc1];
 
注意:不要混用"pushViewController"和"addChildViewController",有些情況會出現沒有把控制器加入到棧。而且很混亂,完全不能預見結果。
 
(5)使用事件進行入棧
a.給第二個控制器的view加上兩個按鈕,分別跳向第三個和第四個控制器的view
Image(217)
 
b.點擊事件方法
每個控制器都有一個navigationController屬性,通知navigationController進行操作
 1 - (IBAction)goToThree { 2     // 配置第三個子控制器 3     ViewControllerThree *vc3 = [[ViewControllerThree alloc] init]; 4     [self.navigationController pushViewController:vc3 animated:YES]; 5 } 6  7 - (IBAction)gotoFour { 8     // 配置第四個子控制器 9     ViewControllerFour *vc4 = [[ViewControllerFour alloc] init];10     [self.navigationController pushViewController:vc4 animated:YES];11 }
 
2.主動出棧
(1)使用"popViewControllerAnimated:YES",彈出一個控制器
1 // 這里是第三個,要回到第二個2 - (IBAction)backtoTwo {3     [self.navigationController popViewControllerAnimated:YES];4 }
 
(2)使用 "popToViewController" 彈出控制器,直到指定的控制器
(3)使用 "popToRootViewController" 彈出占內的控制器,直到rootViewController,回到棧底的控制器
1 // 現在是第三個控制器的view,要回到第一個控制器的view2 - (IBAction)backtoOne {3     // 其實這里拿不到第一個控制器vc1的引用4 //    [self.navigationController popToViewController:vc1 animated:YES];5    6     // 直接彈出,直到導航器的rootViewController,就是第一個子控制器vc1了7     [self.navigationController popToRootViewControllerAnimated:YES];8 }
 
E.設置導航條
1.導航條內容由棧頂控制器控制
2.使用navigationItem控制導航條內容
(1)標題title / titleView(這是UIViewController的成員屬性)
1 @property(nonatomic,copy) NSString *title;  // Localized title for use by a parent controller.
 
sample:設置第一個控制器的title
1 - (void)viewDidLoad {2     [super viewDidLoad];3     self.navigationItem.title = @"第一個view";4 }
 
Image(218)
 
(2)leftBarButtonItem / leftBarButtonItems,會覆蓋“返回”按鈕
(3)rightBarButtonItem / rightBarButtonItems
 1 - (void)viewDidLoad { 2     [super viewDidLoad]; 3     self.navigationItem.title = @"第二個控制器"; 4     5 //     設置左上角的item 6     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"我要回去" style:UIBarButtonItemStylePlain target:nil action:nil]; 7     8     // 設置右上角的item 9     // 使用bar按鈕10     UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil];11    12     // 使用自定義view13     UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithCustomView:[UIButton buttonWithType:UIButtonTypeContactAdd]];14    15     // 這是這是從右到左排列顯示16     self.navigationItem.rightBarButtonItems = @[item1,item2];17 }
 
Image(219)
 
注意: leftBarButtonItems 顯示出來是按照數組順序從左到右,而rightBarButtonItems是從右到左
 
例如把上面右邊的items都放到左邊:
    self.navigationItem.leftBarButtonItems = @[item1, item2];
 
Image(220)
 
3.設置了上一級title之后,如果沒有覆蓋leftBarButtonItem(s),會自動使用上一級的title替換"返回"按鈕的文字
Image(221)
 
-->左上角顯示的文字是由上一級的控制器控制的
navigationItem.backBarButtonItem
1 // 第二個控制器2 - (void)viewDidLoad {3     [super viewDidLoad];4      ...5     // 設置第二個控制器的“返回”樣式6     self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"速速回2" style:UIBarButtonItemStylePlain target:nil action:nil];7 }
 
Image(222)
 
4.navigatonBar就是整條導航條
nvController.navigationBar
當所有東西加載完畢之后,導航條的frame才能被初始化完畢
1 - (void)applicationDidBecomeActive:(UIApplication *)application {2     // 必須在加載完畢激活app后,所有的view的尺寸位置才能確定3     UINavigationController *nvController = (UINavigationController *)self.window.rootViewController;4     NSLog(@"%@", NSStringFromCGRect(nvController.view.frame)); // 整個導航控制器的frame5     NSLog(@"%@", NSStringFromCGRect(nvController.navigationBar.frame)); // 導航條的frame6 }
 
out:
2014-12-19 23:12:51.049 NavigationController[4214:236071] {{0, 0}, {320, 480}}
2014-12-19 23:12:51.050 NavigationController[4214:236071] {{0, 20}, {320, 44}}
 
 

最后的點擊鏈接圖:

Image(231)

 
F.利用storyboard導航
1.創建一個基本的導航界面
(1)創建一個single view application,刪除自帶的ViewController類
Image(223)
 
(2)刪除原來的ViewController,拖入一個NavigationController,并設置為Initial View Controller
Image(224)
 
(3)刪除自帶的rootViewController,拖入一個UIViewController
Image(225)
 
(4)設置新拖入的UIViewController為導航器的rootViewController
Image(226)
 
(5)設置UIView,這就是第一個頁面
51B7F5B0-9493-46A3-9FB3-3BADD2B7D6C2
 
     雙擊相應位置就可以編輯文字(例如title),但是使用storyboard方法不能拖入BarButtonItems組。
 
(6)拖入一個UIView到UIViewController,并且加入一些元素
Image(227)
 
運行效果:
Image(228)
 
2.創建跳轉導航功能
(1)在第一個控制器的view中加入兩個跳轉按鈕,拖入兩個UIViewController
Image(229)
 
(2)拖曳指向,使用"push"事件
Image(230)
 
實現效果:這樣在第一個控制器界面,就能跳轉到第二個或者第三個控制器的界面了
 
注意:不要制造往回導航的按鈕,其實是重新創建了一個控制器加入到控制器棧中
8D8BD0BB-CF93-45A0-8F22-559CCB89ADE2
 
 
G.控制器的生命周期
1.生命周期方法
生命周期方法
 
2.內存警告處理流程
當內存不夠的時候,優先回收不存在屏幕上的view
所以應該在viewDidUnload方法中釋放數據
 
內存警告處理
 
 
 
 
 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91成人天堂久久成人| 欧美中文在线视频| 国产一区二区三区视频| 欧美高清视频在线观看| 亚洲欧美日韩中文视频| 欧美日韩一区二区免费在线观看| 国产午夜精品视频| 色樱桃影院亚洲精品影院| 亚洲a级在线观看| 午夜免费日韩视频| 成人xxxx视频| 国内免费精品永久在线视频| 色狠狠久久aa北条麻妃| 亚洲一级片在线看| 亚洲娇小xxxx欧美娇小| 国产精品丝袜久久久久久不卡| 亚洲午夜久久久久久久| 最近2019中文字幕在线高清| 亚洲成人黄色网址| 国产成人在线播放| 日韩欧美中文字幕在线观看| 96pao国产成视频永久免费| 国产视频精品一区二区三区| 日韩av在线免费看| 国产精品99一区| 欧美午夜精品伦理| 亚洲成色777777在线观看影院| 美女999久久久精品视频| 欧美激情视频网| 亚洲国产成人精品女人久久久| 国模吧一区二区三区| 国产一区深夜福利| 亚洲人成人99网站| 久久青草福利网站| 91精品久久久久久久| 久久久视频免费观看| 国产亚洲精品综合一区91| 国产精品高潮呻吟久久av野狼| 日本成人免费在线| 欧洲日本亚洲国产区| 91成品人片a无限观看| 久久久久久久久国产精品| 2018日韩中文字幕| 精品久久久久久久久久久久久久| 久久亚洲一区二区三区四区五区高| 欧美另类69精品久久久久9999| 欧美激情手机在线视频| 欧美一区视频在线| 日韩欧美在线视频日韩欧美在线视频| 成人福利网站在线观看| 69精品小视频| 国产成人一区三区| 国产精品黄色影片导航在线观看| 日韩电影中文字幕一区| 欧美精品在线视频观看| 奇米成人av国产一区二区三区| 亚洲欧美激情精品一区二区| 欧美激情二区三区| 久久久久久高潮国产精品视| 久久久久久久一| 久久精品人人做人人爽| 欧美成人国产va精品日本一级| 日韩欧美成人免费视频| 日韩av在线不卡| 亚洲欧美另类在线观看| 伊人久久久久久久久久久| 91精品在线看| 亚洲欧美制服第一页| 欧美日韩国产精品| 日韩欧美国产免费播放| 热久久免费视频精品| 亚洲丝袜av一区| 亚洲欧美日韩爽爽影院| 亚洲一区二区三区视频| 国产亚洲综合久久| 91超碰caoporn97人人| 欧美性生活大片免费观看网址| 粉嫩老牛aⅴ一区二区三区| 懂色av中文一区二区三区天美| 95av在线视频| 欧美激情一区二区三区在线视频观看| 蜜臀久久99精品久久久无需会员| 国产乱肥老妇国产一区二| 91精品视频在线免费观看| 精品国产欧美成人夜夜嗨| 国产精品福利在线| 国产精品免费看久久久香蕉| 亚洲精品久久久久久久久久久久久| 国产亚洲精品一区二区| 欧美精品一区三区| 久久久999成人| 在线免费观看羞羞视频一区二区| 日韩av电影中文字幕| 亚洲国产精品人久久电影| 亚洲精品视频二区| 欧洲永久精品大片ww免费漫画| 性欧美在线看片a免费观看| 爽爽爽爽爽爽爽成人免费观看| 欧美精品第一页在线播放| 一本色道久久88亚洲综合88| 国产精国产精品| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲日韩中文字幕在线播放| 成人免费激情视频| 97超级碰碰碰久久久| 国产精品欧美日韩一区二区| 国产成人精品一区二区三区| 精品成人在线视频| 亚洲男人天天操| 日韩av影视综合网| 亚洲乱码国产乱码精品精天堂| 精品人伦一区二区三区蜜桃网站| 成人动漫网站在线观看| 日韩在线观看免费网站| 国产欧美日韩精品丝袜高跟鞋| 亚洲人高潮女人毛茸茸| 久久久久久久亚洲精品| 久久久久久久久电影| 亚洲精品99久久久久中文字幕| 国产精品久久久久影院日本| 久久精品视频中文字幕| 国产日韩欧美中文在线播放| 亚洲国产精品成人va在线观看| 另类专区欧美制服同性| 国产精品一区二区性色av| 国产精品国产福利国产秒拍| 姬川优奈aav一区二区| 黑人巨大精品欧美一区二区| 成人黄色大片在线免费观看| 亚洲激情成人网| 精品欧美激情精品一区| 91在线视频一区| 中文字幕在线看视频国产欧美| 久久五月情影视| 久久久精品一区二区| 国产成人久久精品| 日韩欧亚中文在线| 国产999精品久久久影片官网| 日韩精品中文在线观看| 国产精品激情av电影在线观看| 96精品久久久久中文字幕| 久久久久久久av| 黄色一区二区三区| 欧美成人网在线| 亚洲免费电影在线观看| 欧美综合在线第二页| 欧美成人免费播放| 深夜精品寂寞黄网站在线观看| 欧美亚洲国产日本| 精品日本美女福利在线观看| 久久九九有精品国产23| 狠狠干狠狠久久| 久久久日本电影| 日韩av在线直播| 久久精品电影网| 欧美日韩国产中文精品字幕自在自线| 精品亚洲国产成av人片传媒| 亚洲日本欧美中文幕| 午夜精品一区二区三区视频免费看| 91精品国产高清自在线看超| 亚洲加勒比久久88色综合| 欧美日韩免费在线观看| 亚洲成av人片在线观看香蕉| 久久久99免费视频|