7.ViewController
MVC
-模型宙拉。保存應(yīng)用數(shù)據(jù)的狀態(tài)。
-視圖如输。為用戶展示信息并提供接口鼓黔。
-控制器。接收用戶請求不见,根據(jù)請求更新模型澳化。更新視圖,并將其作為對用戶請求的回應(yīng)稳吮。
單向引用:Controller 引用 View 和Model, View和 Model 不直接引用Controller缎谷。
UIViewController
UIViewController是所有控制器的根類。
作用:
-管理View
-傳遞數(shù)據(jù)
-響應(yīng)用戶操作
-內(nèi)存管理灶似、狀態(tài)保持
-適應(yīng)設(shè)備
生命周期
1.alloc 創(chuàng)建對象列林,分配空間
2.init 初始化對象,初始化數(shù)據(jù)
3.loadView 從nib載入視圖
4.viewDidLoad 載入完成酪惭,可進行自定義數(shù)據(jù)以及動態(tài)創(chuàng)建其他控件
5.viewWillApper 視圖將出現(xiàn)在屏幕之前
6.viewDidApper 視圖已經(jīng)在屏幕上渲染完成
--視圖被移除屏幕并且銷毀時的順序
1.viewWillDisappear 視圖將被從屏幕上移除之前執(zhí)行
2.viewDidDisappear 視圖已經(jīng)被從屏幕上移除
3.dealloc 視圖被銷毀
創(chuàng)建 rootViewController 的過程
UIApplication:
_runWithMainScene:transitionContext:completion: _loadMainInterfaceFile _loadMainStoryboardFileNamed:bundle: /_loadMainNibFileNamed:bundle:
如果有Info.plist,_loadMainInterfaceFile,讀取Info.plist;Info.plist是UIMainStoryboardFile時希痴,用_loadMainStoryboardFileNamed:bundle:;是NSMainNibFile時,用 _loadMainNibFileNamed:bundle:.
UIApplication??no春感,用UIApplicationDelegatedidFinshLaunch創(chuàng)建window和provide UI,創(chuàng)建appDelegate.window.rootViewController,
UIApplicationDelegatedidFinshLaunch??
no砌创,,window is nil鲫懒,no UI(black screen)
取得ViewController 的 View
View Controller 盡可能推遲View 加載嫩实,以UI開始的是系統(tǒng)類,不查找nib
initWithNibName 初始化指定的nib??ViewController 不帶Controller名字的nib??ViewController同名nib窥岩,默認用UIView創(chuàng)建空白視圖甲献。
8.StoryBoard
故事板
可以描述應(yīng)用中有哪些界面,界面有哪些控件以及它們的事件颂翼。故事板還能描述界面之間是如何導(dǎo)航的晃洒。
Segue
Segue 定義了Scene之間的跳轉(zhuǎn)方式慨灭,體現(xiàn)了Scene之間的關(guān)系。
初始場景 ??Is Initial View Controller
從一個Scene跳轉(zhuǎn)到另一個Scene球及,代碼執(zhí)行:
- (IBAction)actionWithSegue:(id)sender {
[self performSegueWithIdentifier:@"goTo2" sender:sender];
}
Segue返回
從一個Scene2返回到另一個Scene1缘挑,使用 Unwinding Segue
- (IBAction)unwindingForSegue:(UIStoryboardSegue *)unwindingSegue {
}
傳輸數(shù)據(jù)
-傳遞給下一個ViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"goTo2"]) {
NSLog(@"%@",segue.destinationViewController.title);
}
}
使用多個storyboard(Storyboard Reference)
[self showViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"vc2"] sender:sender];
9.App Lifecycle
應(yīng)用生命周期
iOS應(yīng)用5種狀態(tài):
-Not Running(非運行狀態(tài))。應(yīng)用沒有運行或被系統(tǒng)終止桶略。
-Inactive(前臺非活動狀態(tài))。應(yīng)用正進入前臺狀態(tài)诲宇,但是還不能接受事件處理际歼。
-Active (前臺活動狀態(tài))。應(yīng)用進入前臺狀態(tài)姑蓝,能接受事件處理鹅心。
-Background(后臺狀態(tài))。應(yīng)用進入后臺后纺荧,依然能夠執(zhí)行代碼旭愧。
-Suspended(掛起狀態(tài))。應(yīng)用進入掛起狀態(tài)宙暇,不能執(zhí)行代碼输枯。如果系統(tǒng)內(nèi)存不夠,應(yīng)用會被終止占贫。
Not Running ?? Inactive階段
調(diào)用
application:didFinishLaunchingWithOptions:方法桃熄,
發(fā)出UIApplicationDidFinishLaunchingNotification通知。
Inactive ?? Active階段
調(diào)用
applicationDidBecomeActive:方法型奥,
發(fā)出 UIApplicationDidBecomeActiveNotification通知瞳收。
Active ?? Inactive階段
調(diào)用
applicationWillResignActive:方法,
發(fā)出UIApplicationWillResignActiveNotification通知厢汹。
Inactive ?? Background階段
應(yīng)用從非活動狀態(tài)進入到后臺螟深。
Background ?? Suspended階段
調(diào)用applicationDidEnterBackground:方法,
發(fā)出UIApplicationDidEnterBackgroundNotification通知烫葬。
Suspended ?? Background階段
應(yīng)用從掛起狀態(tài)進入后臺界弧。
Background ?? Inactive階段
調(diào)用
applicationWillEnterForeground:方法
發(fā)出UIApplicationWillEnterForegroundNotification通知。
Suspended ?? Not Running階段
應(yīng)用從掛起狀態(tài)進入非運行狀態(tài)厘灼。
調(diào)用
applicationWillTerminate:方法夹纫,
發(fā)出UIApplicationWillTerminateNotification通知。
10.Navigation
UINavigationController设凹。導(dǎo)航控制器舰讹,可以構(gòu)建樹形導(dǎo)航模式應(yīng)用到根控制器。
UINavigationBar闪朱。導(dǎo)航欄月匣,與導(dǎo)航控制器一對一關(guān)系钻洒,管理一個視圖控制器的堆棧,用來顯示樹形結(jié)構(gòu)中的視圖锄开。
UINavigationItem素标。導(dǎo)航欄項目。
UIBarButtonItem萍悴。導(dǎo)航欄中的按鈕头遭。
-導(dǎo)航時的數(shù)據(jù)傳遞
1.通過 Segue
2.利用 Delegate
- navigationController:willShowViewController:animated:
- navigationController:didShowViewController:animated:
-代碼中使用導(dǎo)航
創(chuàng)建
- initWithRootViewController:
- initWithNavigationBarClass:toolbarClass:
- setViewControllers:animated:
跳轉(zhuǎn)
- pushViewController:animated:
- popViewController:animated:
- popToRootViewController:animated:
- popToViewController:animated:
- showViewController:sender:
設(shè)置與控制
.delegate
.viewControllers
.navigationBar
toolbar
UIToolbar 工具欄。工具欄時工具按鈕(UIBarButtonItem)的容器.
iPhone中癣诱,工具欄位于屏幕底部计维,豎屏布局工具欄,按鈕數(shù)不能超過5個撕予,如果超過5個鲫惶,第5個按鈕顯示“更多”。
UIBarButtonItem中实抡,有按鈕欠母,“固定空格”和“可變空格”。
12.Tabbar
UITabBarController
使用步驟:
(1)初始化UITabBarController
UITabBarController *tb=[[UITabBarController alloc]init];
(2)設(shè)置UIWindow的rootViewController為UITabBarController
self.window.rootViewController=tb;
(3)創(chuàng)建相應(yīng)的子控制器(viewcontroller)
UIViewController *c1=[[UIViewController alloc]init];
UIViewController *c2=[[UIViewController alloc]init];
(4)把子控制器添加到UITabBarController
[tb addChildViewController:c1];
[tb addChildViewController:c2];
或者
tb.viewControllers=@[c1,c2];
UITabBarButton里內(nèi)容吆寨,由對應(yīng)子控制器tabBarItem屬性來決定
c1.tabBarItem.title=@"消息";
c1.tabBarItem.image=[UIImage imageNamed:@"messageImage"];
兩種方式可以往UITabBarController中添加子控制器
[tb addChildViewController:c1];
tb.viewControllers=@[c1,c2];