ViewController
作為連接視圖View和模型Model的橋梁(控制器Controller)丈屹,從名字就可以看得出來罗售,它是用來管理View的。除此之外奖恰,它還承擔(dān)著傳遞數(shù)據(jù)吊趾,相應(yīng)用戶操作,內(nèi)存管理瑟啃,狀態(tài)保持和適應(yīng)設(shè)備的功能论泛。
先來看看它的生存周期:
當一個viewController它管理的view出現(xiàn)或者消失的時候會引發(fā)相應(yīng)的方法,如果有需求蛹屿,可以在對應(yīng)的方法里寫代碼來處理相應(yīng)的事務(wù)屁奏。
默認狀態(tài)下,Xcode會將與ViewController同名的Xib文件關(guān)聯(lián)到對應(yīng)的Controller上错负。如MyViewController關(guān)聯(lián)到MyView.xib或者MyViewCon.xib坟瓢。
除此之外也可以用代碼來制定加載制定的xib:
[UIViewController initWithNibName:@"MyView"];
或者在IB中指定ViewController,如下:
跳轉(zhuǎn)
在viewcontroller中可以跳轉(zhuǎn)到另一個viewcontoller:
[self presentViewController: animated: completion:];
[self showViewController: sender:];
撤銷當前的view可以使用:
[self dismissViewControllerAnimated: completion:];
回傳數(shù)據(jù)
在其中可以設(shè)定回傳數(shù)據(jù)或者在撤銷當前view之后執(zhí)行一段代碼犹撒。completion是一個代碼塊block折联。
實際上是使用了觀察者模式來通知第一個view,并將數(shù)據(jù)傳給它识颊。
//在第二個view中诚镰,發(fā)送do發(fā)生變化的消息,并且將數(shù)據(jù)存在字典中回轉(zhuǎn)給第一個view
[self dismissViewControllerAnimated:YES completion:^{
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"do" object:self userInfo:dict];
}];
//在第一個view中的viewDidLoad方法中
//注冊觀察者祥款,如果do對象有變化就執(zhí)行Test方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(Test:) name:@"do" object:nil];
- (void)Test:(id)sender{
NSLog(@"%@", sender);
}
執(zhí)行結(jié)果:
2016-06-02 17:52:33.594 NibVC[37096:5919151] NSConcreteNotification 0x7fd6495118e0 {name = do; object = <SecondViewController: 0x7fd6494b82d0>; userInfo = {
key1 = value1;
key2 = value2;
}
這種方法不僅可以用于viewController的回傳值清笨,還可以用于各個對象之間的消息傳遞,只需要注冊觀察者刃跛,和發(fā)送消息即可抠艾。
Storyboard
Storyboard中文譯為故事版,也就是做界面的地方桨昙,app的應(yīng)用邏輯和導(dǎo)演講故事是不是很像呢检号?在這之前首懈,蘋果使用的是xib文件來做的界面。storyboard的有點在于對多個view的管理比xib的要好谨敛。
大多數(shù)操作就是托控件到view上,如果要關(guān)聯(lián)到.m文件中則要按住Ctrl鍵+上控件拖到對應(yīng)的.m文件上即可選擇是添加為屬性IBOutlet還是方法IBAction滤否。
場景的跳轉(zhuǎn)
Storyboard的場景跳轉(zhuǎn)使用的是Segue脸狸,按下Ctrl拖住一個按鈕到下一個場景上即可實現(xiàn)。
可以對Segue進行命名藐俺,以便在代碼中使用Segue炊甲。
[self performSegueWithIdentifier:@"" sender:sender];
也可以在代碼中顯示Storyboard里的View Controller:
id vc = [self.storyboard instantiateViewControllerWithIdentifier:@""];
[self showViewController:vc sender:sender];
返回
在對應(yīng)的vc中添加,再在Storyboard中將按鈕的方法設(shè)置為以下方法欲芹。ForSegue可以改變?yōu)槠渌拿帧?/p>
- (void)unwindForSegue:(UIStoryboardSegue*)unwindSegue{
}
App的聲明周期
Navigation Controller
NavigationController是一種高效管理多個界面的工具卿啡,它可以提供在多個view之間方面地跳轉(zhuǎn)。
每個被管理的ViewController自己提供:
內(nèi)容菱父,導(dǎo)航欄標題颈娜,導(dǎo)航欄上的自定義按鈕,或者可選的工具欄按鈕浙宜。
數(shù)據(jù)的傳遞可以通過Segue或者Delegate官辽,Segue上面提到過,下面就列出使用Delegate的方法:
- (void)navigationController: willShowViewController: animated:
- (void)nagivationController: didShowViewController: animated:
代碼中使用
//創(chuàng)建
- initWithRootViewController:
- initWithNavigationBarClass:toolbarClass:
//跳轉(zhuǎn)
- pushViewController:animated:
- popViewControllerAnimated:
- popToRootViewControllerAnimated:
- popToViewController:animated:
Tabbar Controller
TabbarController是另一種管理多個ViewController的方式粟瞬。
使用方法和NavigationController非常相似同仆。還可以和它結(jié)合起來一起使用。