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


ViewController在App開發中是至關重要的一環,無論是頁面的展示和數據之間的交互,ViewController提供了一個框架可以管理和構建App應用。iOS中構建App提供了兩種方式一種是ViewController管理比如NavigationController和UITabBarController,另外一種就是我們經常打交道用到的自定義ViewController或者是常用UITableViewController展示我們需要的數據。下面這種蘋果官網的圖片可以加強理解:

生命周期(LifeCircle)

視圖的生命周期其實可以理解為Load-Present-Hidden(加載-展現-隱藏)三個階段,如果從ViewController中方法中執行的順序來看,順序應該是這樣的:

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

loadView:一般情況下不用用到,除非需要重寫設置View;

viewDidLoad/dealloc:視圖加載完成之后的設置和視圖銷毀的時候調用;

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

viewDidAppear/viewDidDisappear:視圖展現在屏幕的時候和視圖完全消失在屏幕的時候調用,默認不做任何操作;

如果看生命周期的話,網上有很張類似這樣的圖,具體可以參考下,來源於蘋果官網:

 

可以重寫代碼看下效果:

- (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];

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM