IOS中UIViewController的创建
IOS程序中,一個應用默認只有一個UIWindow。UIWindow是比較特殊的UIView控件,也是程序啟動后創建的第一個UIView對象,為了透徹的了解UIWindow和UIViewController之間的關系,以及UIViewController的創建,從新建一個EmptyApplication工程開始。
Empty的工程,默認的目錄結構中只有AppDelegate類,這個類是Application對象的委托,會在程序不同的生命周期中回調不同的方法(關于application生命周期的話題,等我學習好了在嘚瑟……)didFinishLaunchingWithOptions中的代碼如下
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// Override point for customization after application launch.self.window.backgroundColor = [UIColor whiteColor];[self.window makeKeyAndVisible];return YES;?可以看到程序已啟動,AppDelegate對象會創建一個UIWindow對象,并設置window的背景色為白色,然后通過makeKeyAndVisible使其可見并成為主窗口,直接運行就看到一個白色的區域展現眼前。界面上的所有UI元素,如果想要展示出來,都必須依托UIWindow對象,沒有指定UIWindow的UIView時,它會自動生成一個UIView對象。創建UIViewController大致有自定義直接創建、通過storyboard創建和使用Xib文件創建。
1、直接創建:
//創建控制器ViewControllerTest *vc=[[ViewControllerTest alloc] init];vc.view.backgroundColor=[UIColor purpleColor];UISwitch *s=[[UISwitch alloc] init];[vc.view addSubview:s];//將控制器的View添加到window上的方法有個弊端//當發生旋轉事件時,UIApplication對象會將旋轉事件傳遞給UIWindow,UIWindow會將其傳遞給它的跟控制器,由跟控制器決定是否需要旋轉//所以一般建議將自己創建的viewcontroller以window跟控制器的方式設置//[self.window addSubview:vc.view];self.window.rootViewController=vc;//讓創建的UIWindow成為主窗口并顯示出來[self.window makeKeyAndVisible];?直接實例化一個UIViewController的對象,設置為window的根控制器,這里我設置實例化的ViewController的View背景色為紫色,運行就顯示紫色,而且我添加上去的switch控件也能夠隨手機屏幕的轉動而旋轉。
需要注意的是如果有兩個window對象,在IOS7之前,只有主窗口的控制器里面的控件能夠交互,但是在IOS7,不管你是不是主窗口,都能夠正常使用里面的控件。
?
2、通過storyboard創建UIViewController
//通過加載storyboard創建ViewController//僅僅是加載了名為Storyboard的storyboard,并不會創建Storyboard中的控制器以及控件UIStoryboard *sb=[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];//創建Storyboard中箭頭指向的控制器ViewControllerTest *vc=[sb instantiateInitialViewController];self.window.rootViewController=vc;ViewControllerTest *vc2=[sb instantiateViewControllerWithIdentifier:@"two"];self.window.rootViewController=vc2;[self.window makeKeyAndVisible];?通過storyboard創建,先受用storyboardWithName方法找到指定名字的storyboard對象,這里只是加載了這個storyboard,還沒有創建任何UI元素呢哦……然后通過instantiateInitialViewController方法,該方法創建了故事板中箭頭指向的那個控制器對象。一個故事板中當然可以包括很多的控制器對象,如果想要創建指定的控制器對象,一般使用instantiateViewControllerWithIdentifier方法,指定控制器的storyboard id就搞定了。如上代碼我創建了兩個控制器
?
3、通過xib文件創建UIViewController
xib是storyboard的前身,都是對界面布局的描述文件,故而可以通過xib文件進行創建
ViewControllerTest *vc=[[ViewControllerTest alloc] initWithNibName:@"One" bundle:nil];self.window.rootViewController=vc;?這種方式的代碼就簡單多了,只需要在實例化控制器對象的initWithNibName方法中,指定xib文件名即可,只是有一點需要注意,就是指定的xib文件一定要繼承實例化的ViewController對象,也就是指定xib文件的custom class對象為代碼中的ViewControllerTest對象即可。
最后需要說明的是,如果一旦重寫了ViewController的loadView方法,那么不論通過哪種方法創建UIViewController都白費了。
最后附上一張圖,完整的說明各種創建ViewController的方法和選擇過程
轉載于:https://www.cnblogs.com/luseike/p/3773878.html
總結
以上是生活随笔為你收集整理的IOS中UIViewController的创建的全部內容,希望文章能夠幫你解決所遇到的問題。