UIViewController基礎
在iOS7之后鹰祸,Xcode已經(jīng)將視圖控制器與main.storyboard綁定甫窟,不需要再手動編寫第一個視圖控制器了。
為了了解原理蛙婴,關閉main.storyboard粗井,進行viewController的創(chuàng)建和使用:
- main.m中的main函數(shù)依舊是整個APP程序的主函數(shù),入口函數(shù)
int main(int argc, char * argv[]) {
@autoreleasepool {
//UIkit框架的啟動函數(shù)
//P1:argc 啟動時帶有參數(shù)的個數(shù)
//P2:argv 參數(shù)列表
//P3:要求傳入一個主框架類對象,如果參數(shù)為nil,系統(tǒng)會自動用默認的框架類作為主框架類
//P4:主框架的代理對象名字
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
官方將 操作系統(tǒng)浇衬、UIApplication(由官方維護)懒构、AppDelegate分為三層。默認主框架類對象為AppDelegate耘擂,所以AppDelegate實現(xiàn)類就成為應用程序的初始化入口胆剧。
- 引入視圖控制器類 #import "ViewController.h"
- 創(chuàng)建視圖控制器并賦值到窗口根視圖控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//應用程序window唯一
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
//創(chuàng)建視圖控制器對象
ViewController *vcRoot = [[ViewController alloc]init];
//對窗口的根視圖控制器進行賦值操作
//根視圖控制器唯一,屬于window的屬性
//視圖控制器用來管理界面和處理界面的邏輯類對象
//程序啟動前必須對根視圖控制器進行賦值
self.window.rootViewController = vcRoot;
//將window作為主視圖并顯示出來
[self.window makeKeyAndVisible];
return YES;
}
此時就開始了視圖控制器ViewController.m的生命周期
UIViewController生命周期
視圖控制器主要方法:
- viewDidLoad布局初始化視圖時調用
- viewWillAppear視圖將要顯示
- viewDidAppear視圖已經(jīng)顯示
- viewWillDisappear視圖將要消失
- viewDidDisappear視圖已經(jīng)消失
//當視圖控制器第一次被加載顯示視圖時醉冤,調用此函數(shù)
//布局初始化視圖時使用
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(100, 100, 100, 200);
view.backgroundColor = [UIColor orangeColor];
[self.view addSubview:view];
self.view.backgroundColor = [UIColor blueColor];
NSLog(@"first load the view");
}
//當視圖將要顯示時秩霍,調用此函數(shù)
//視圖分為:1,顯示前 2蚁阳,正在顯示 3铃绒,已經(jīng)被隱藏(顯示之后)
//參數(shù):表示是否用動畫切換后顯示
-(void)viewWillAppear:(BOOL)animated{
NSLog(@"VIEW WILL APPEAR ");
}
//視圖即將消失時調用此函數(shù)
//參數(shù):表示是否在動畫切換后消失
//當前的狀態(tài),視圖還是顯示在屏幕上的
-(void)viewWillDisappear:(BOOL)animated{
NSLog(@"VIEW WILL DISAPPEAR ");
}
//當視圖已經(jīng)顯示到屏幕后的瞬間調用此函數(shù)
//參數(shù):是否調用動畫切換顯示的
//當前狀態(tài)已經(jīng)顯示到屏幕了
-(void)viewDidAppear:(BOOL)animated{
NSLog(@"VIEW ALREADY APPESAR ");
}
//當前視圖已經(jīng)消失
//參數(shù):表示是否用動畫切換顯示的
-(void)viewDidDisappear:(BOOL)animated{
NSLog(@"VIEW ALREADY DISAPEAR ");
}
視圖控制器界面切換
當點擊頁面時跳轉到其他視圖控制器:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
ViewController2 *vc = [[ViewController2 alloc]init];
[self presentViewController:vc animated:YES completion:nil];
}