iOS開發-ViewController的生命週期和切換

ViewController在App開發中是相當重要的一環,不管是頁面的展現和數據之間的交互,ViewController提供了一個框架能夠管理和構建App應用。iOS中構建App提供了兩種方式一種是ViewController管理好比NavigationController和UITabBarController,另一種就是咱們常常打交道用到的自定義ViewController或者是經常使用UITableViewController展現咱們須要的數據。下面這種蘋果官網的圖片能夠增強理解:app

生命週期(LifeCircle)

視圖的生命週期其實能夠理解爲Load-Present-Hidden(加載-展示-隱藏)三個階段,若是從ViewController中方法中執行的順序來看,順序應該是這樣的:框架

loadView→viewDidLoad→viewWillAppear→viewDidAppear→viewWillDisappear→viewDidDisappear→dealloc佈局

loadView:通常狀況下不用用到,除非須要重寫設置View;url

viewDidLoad/dealloc:視圖加載完成以後的設置和視圖銷燬的時候調用;spa

viewWillAppear/viewWillDisappear:視圖即將呈現和視圖即將消失;blog

viewDidAppear/viewDidDisappear:視圖展示在屏幕的時候和視圖徹底消失在屏幕的時候調用,默認不作任何操做;生命週期

若是看生命週期的話,網上有很張相似這樣的圖,具體能夠參考下,來源於蘋果官網:圖片

 

能夠重寫代碼看下效果:ip

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSLog(@"viewDidLoad-keso");
}
-(void)viewWillAppear:(BOOL)animated{
    NSLog(@"viewWillAppear-FlyElephant");
}
-(void)viewDidAppear:(BOOL)animated{
    NSLog(@"viewDidAppear");
}

-(void)viewWillDisappear:(BOOL)animated{
    NSLog(@"viewWillDisappear");
}

-(void)viewDidDisappear:(BOOL)animated{
    NSLog(@"viewDidDisappear-http://www.cnblogs.com/xiaofeixiang/");
}

  

viewWillLayoutSubviews和viewDidLayoutSubviews若是使用到自動佈局,須要修改自動佈局中的約束條件,那麼能夠在viewWillLayoutSubviews中進行操做,最近遇到一個就是text文本框中文字過多的時候文字不能不能置頂,能夠在viewWillDidSubviews中操做:開發

- (void)viewDidLayoutSubviews {
    [self.myTextView setContentOffset:CGPointZero animated:NO];
}

生命週期中幾個方法的調用實際中須要看本身的操做,在正確的地方作正確的事,會事半功倍的,具體須要看本身的熟悉程度~

ViewController切換

切換的目的就是想將合適的內容放到用戶的手機屏幕上,呈現出不一樣的內容也就是咱們的目標,通常狀況有會有三種方式,聯線(Segue),Modal(模態),Push(須要和NavigationController配合使用),自定義的Segue,正常狀況下通常會涉及前兩種,若是有特別的需求能夠研究一下第三種自定義,Push方式以前的文中講過,本文主要講一下Modal代碼實現的兩種方式,若是是非代碼凡事Control選擇一下Modal便可;

presentViewController方式,最開始加載是一個xib是沒有問題的,代碼以下:

    MainViewController *mainController=[[MainViewController alloc]init];
    mainController.modalTransitionStyle=UIModalTransitionStylePartialCurl;
    [self presentViewController:mainController animated:YES completion:nil]; 

    UIModalTransitionStyleCoverVertical-默認的,從下來,往下去;UIModalTransitionStyleCrossDissolve-漸變出現和消失;

    UIModalTransitionStyleFlipHorizontal-水平翻轉; UIModalTransitionStylePartialCurl-翻書效果;

FirstViewController對應的View不是xib在StoryBoard中,StoryBoard視圖中調用presentViewController若是仍是使用上面的初始化方式就是黑屏了,其實換成storyBoard中得instantiateViewControllerWithIdentifier便可~

    FirstViewController *firstController=[self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
    [self presentViewController:firstController animated:YES completion:nil];

 好久沒寫文章,比較淺陋,若有不當,多多指正~

相關文章
相關標籤/搜索