iOS開發之控制器建立與載入(生命週期)

來源:互聯網
上載者:User

標籤:

1、如何建立一個控制器

控制器常見的建立方式有以下幾種:

(1)通過storyboard建立

(2)直接建立

MJViewController *mj = [[MJViewController alloc] init];

(3)指定xib檔案來建立

MJViewController *mj = [[MJViewController alloc] initWithNibName:

@"MJViewController" bundle:nil];

注意,建立xid後還要設定xid中哪個view是ControllerView的view(而用storyboard建立控制器卻不用設定因為系統已經自動化佈建過了),設定方法為:

首先把File`s Owner設定為控制器,如:

表示這個xid檔案是為哪個類(控制器)服務的。任何視圖(比如UIViewxidstoryboard等)設定了class,都代表那個視圖是為那個類服務的,即從那個類中操作這個視圖中的控制項或初始化這個視圖等。

然後設定控制器的view是哪個view,方法為右鍵File`s Owner拖view選項到相關view上,如:

如果在建立繼承ViewController的類時勾選下面選項就可以省略這個步驟(會自動建立xid檔案並自動完成上述步驟):

通過xid建立控制器時,如果建立的控制器名稱和xid檔案的名稱一樣,則可以通過以下三種方式將它設定為rootViewController:

方式一:

self.window.rootViewController =

[[MJViewController alloc] initWithNibName:@"MJViewController" bundle:nil];

 

方式二:

self.window.rootViewController = [[MJViewController alloc] initWithNibName:nil bundle:nil];

這裡將initWithNibName參數設定為nil,等價於方法三,首先會去找檔案名稱為MJView.xid的作為初始化時的xid檔案,如果沒找到MJView.xid檔案,則會去尋找檔案名稱為MJViewController.xid的作為初始化的xid檔案。

 

方式三:

self.window.rootViewController = [[MJViewController alloc] init];

【備忘】蘋果官方推薦在控制器的ViewLoad方法中建立控制器的view。

2、通過storyboard建立控制器詳解

(1)先載入storyboard檔案(Test是storyboard的檔案名稱)

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];

(2)接著初始化storyboard中的控制器

初始化“初始控制器”(箭頭所指的控制器)

MJViewController *mj = [storyboard instantiateInitialViewController];

通過一個標識初始化對應的控制器

MJViewController *mj =

[storyboard instantiateViewControllerWithIdentifier:@”mj"];

 

例如,建立storyboard檔案(two. storyboard),向裡面拖入一個ViewController,如何將這個storyboard檔案中的ViewController顯示到UIWindow呢?

首先,要載入這個storyboard:

UIStoryboard *storyboard =

[UIStoryboard storyboardWithName:@"Two" bundle:nil];

然後使用這個storyboard建立ViewController,現在我們建立一個類MJTwoViewController,它繼承自ViewControlle,然後:

MJTwoViewController *vc = [storyboard instantiateInitialViewController];

最後將這個控制器設定為rootViewController即可:

self.window.rootViewController = vc;

如果storyboard中有多個ViewController,可以使用下列方法載入指定ViewController:

MJTwoViewController *vc =

[storyboard instantiateViewControllerWithIdentifier:@"myID"];

如果我們想為storyboard中ViewController中的控制項設定事件,比如按鈕點擊事件,我們只需往MJTwoViewController中拖線並實現相應方法即可。

3、控制器view的載入

 

控制器的view是消極式載入的:用到時再載入。

可以用isViewLoaded方法判斷一個UIViewController的view是否已經被載入。

控制器的view載入完畢就會調用viewDidLoad方法。

3、         多控制器

一個iOS的app很少只由一個控制器組成,除非這個app極其簡單。當app中有多個控制器的時候,我們就需要對這些控制器進行管理。有多個view時,可以用一個大的view去管理1個或者多個小view。控制器也是如此,用1個控制器去管理其他多個控制器。

比如,用一個控制器A去管理3個控制器B、C、D:控制器A被稱為控制器B、C、D的“父控制器”。控制器B、C、D的被稱為控制器A的“子控制器”。

為了便於管理控制器,iOS提供了2個比較特殊的控制器:

UINavigationController

UITabBarController

5、控制器的生命週期

/**

 *  view載入完畢

 */

- (void)viewDidLoad

{

    [super viewDidLoad];

   

    NSLog(@"MJOneViewController-viewDidLoad");

}

 

/**

 *  view即將顯示到window

 *

 */

- (void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated];

   

    NSLog(@"MJOneViewController-viewWillAppear");

}

 

/**

 *  view顯示完畢(已經顯示到視窗)

 */

- (void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

   

    NSLog(@"MJOneViewController-viewDidAppear");

}

 

/**

 *  view即將從window上移除(即將看不見)

 *

 */

- (void)viewWillDisappear:(BOOL)animated

{

    [super viewWillDisappear:animated];

   

    NSLog(@"MJOneViewController-viewWillDisappear");

}

 

/**

 *  viewwindow上完全移除(完全看不見)

 *

 */

- (void)viewDidDisappear:(BOOL)animated

{

    [super viewDidDisappear:animated];

   

    NSLog(@"MJOneViewController-viewDidDisappear");

}

 

/**

 *  view即將銷毀的時候調用

 */

- (void)viewWillUnload

{

    [super viewWillUnload];

}

 

/**

 *  view銷毀完畢的時候調用

 */

- (void)viewDidUnload

{

    [super viewDidUnload];

}

 

/**

 *  當接收到記憶體警告的時候

 */

- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

 

}

【備忘】控制器中還有一個方法:

— (void)loadView;

這個方法是載入控制器中的View時候調用的,通常我們靠重寫這個方法去改變控制器的View。

iOS開發之控制器建立與載入(生命週期)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.