【原】iOS學習之控制器的建立

本次博客是一篇總結性質的博客,總結的是各類建立控制器的方式以及一些須要注意的操做。app

一、經過storyboard建立控制器

 正如我上一篇博客中所說,當 Main Interface 沒有選定的時候,咱們通常只能經過代碼來建立一個 UIWindow,再也不使用系統建立好的 Main.storyboard。ide

 經過 storyboard 建立控制器也是在 Main Interface 沒有選定的時候,可是咱們還使用系統建立好的 Main.storyboard,經過不一樣的方法來建立窗口的根控制器。spa

  • 第一步:在 AppDelegate.m 文件的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中先初始化一個 UIWindow 對象,代碼以下:
    // 建立窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  • 第二步:建立一個 UIStoryboard 對象並將其初始化爲 Main.storyboard

  初始化方法:code

// 參數1:storyboard文件名,不須要帶後綴
// 參數2:置爲nil時表示[NSBundle mainBundle]
+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(nullable NSBundle *)storyboardBundleOrNil;

  實例代碼:對象

    // 加載storyboard
    // storyboard文件名,不須要帶後綴,初始化爲 Main.storyboard,name就是Main
    // nil:  [NSBundle mainBundle]
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  • 第三步:經過storyboard建立控制器

  ① 指定箭頭指向的控制器爲窗口的根控制器blog

  方法:字符串

// 加載箭頭指向的控制器
- (nullable __kindof UIViewController *)instantiateInitialViewController;

  實例代碼:博客

    // 經過storyboard建立控制器
    // instantiateInitialViewController:加載箭頭指向的控制器
    UIViewController *vc = [storyboard instantiateInitialViewController];

   實例圖:it

  如上圖:咱們將粉色背景的控制器設置爲默認 Main.storyboard 的控制器,當咱們使用上述代碼時,程序運行的效果是:以下圖的一個粉色窗口io

  ② 經過 Storyboard ID 來建立根控制器

  方法:

// 參數爲:Storyboard ID 的字符串
- (__kindof UIViewController *)instantiateViewControllerWithIdentifier:(NSString *)identifier;

  實例代碼:

// 經過 Storyboard ID 建立控制器
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"green"];

  正如 ① 中所示的圖,咱們將綠色背景的控制器的 Storyboard ID 置爲 "green",可是Main.storyboard 的默認控制器仍然爲粉色背景的控制器,使用上述實例代碼,運行結果爲以下圖的一個綠色窗口

  具體如何設置視圖控制器爲 UIWindow 對象的根視圖控制器以及將 UIWindow 對象做爲主窗口並可見,請參考上一篇博客。

二、經過xib建立控制器

 經過 xib 建立控制器也是在 Main Interface 沒有選定的時候,本身在 AppDelegate.m 文件中對應的方法中先初始化一個 UIWindow 對象。

 建立xib的方法:

  ① 在建立一個視圖控制器的類的時候,將 Also create XIB file 選中以後,就會建立出來一個和控制器類對應的xib,以下圖:

    這種方法建立的xib的名字與所對應的類名相同。

  ② 建立一個名字能夠自定義的 xib

  建立後的設置:(具體以下圖)

   (1)選擇文件全部者選項

   (2)綁定控制器

   (3)綁定xib視圖

 

  經過xib建立根控制器的方法是一個控制器的初始化方法,實例代碼:

    // 經過xib建立控制器
    ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

  加載xib的特殊寫法:

    // 特殊寫法1:
    UIViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
    // 特殊寫法2:
    UIViewController *vc = [[ViewController alloc] init];

  以上 xib 的特殊寫法加載 xib View 視圖的底層實現:

   若是描述控制器 View 的 xib 跟控制器的類名相同,就會去加載

   只有控制器的 init 方法底層會調用 initWithNibName:bundle:

   只要經過 initWithNibName:bundle: 初始化控制器,而且 nibName 爲 nil ,就會執行如下幾步:

   (1)先尋找有沒有跟控制器類名同名可是不帶Controller的xib,若是有就會去加載(XMGView.xib)

   (2)若是沒有就尋找有沒有跟控制器類名同名的xib,若是有就會去加載(XMGViewController.xib)

   (3)若是都沒有找到,建立空的view,

相關文章
相關標籤/搜索