ios7.0結合storyborad實現頁面跳轉的總結

折騰了一成天,本文總結一下ios7.0頁面跳轉有關的內容javascript

storyboard的潛規則

我接觸ios很晚,環境已是xcode5+ios7,因此對之前的IOS開發模式並不瞭解。在網上查閱了不少資料,發現之前的代碼,不少都須要本身coding來建立ViewController,好比:html

 

Objc代碼   收藏代碼
  1. WTwoViewController *controller = [[WTwoViewController alloc]initWithNibName:@"WTwoViewController" bundle:nil];  
  2. [self presentViewController:controller animated:YES completion:nil];  


可是用storyboard來管理view controller的話,storyboard會自動處理view controller的初始化動做,因此就再也不須要本身coding來建立view controller的實例。在另一篇博客裏看到這句話:java

 

用過xib的人我相信不少人都會常常用到-presentModalViewController:animated:以及-pushViewController:animated:這兩個方法。這種代碼在storyboard裏將成爲歷史;取而代之的是Segue」ios

基於控件的跳轉

用storyboard作開發,常常須要拉線,本文不介紹,請看這篇官方文檔:web

start developing iOS app todaybootstrap

這種拉線,是從button拉到view controller:api

這種方式只要點擊了這個button,就會自動跳轉,不須要寫任何代碼xcode

 

直接從controller到controller

 
這種拉線是直接從View Controller到View Controller:
 
這種方式已經預先建立了segue,可是還須要手工編碼,首先須要給segue設置一個identity
 
而後寫代碼來跳轉:
Objc代碼   收藏代碼
  1. // 跳轉到bootstrap  
  2. - (void) jumpToBootstrap{  
  3.     [self performSegueWithIdentifier:@"fromWelcomeToBootstrap" sender:self];  
  4. }  
這段代碼必須寫在-viewDidAppear裏,不能寫在-viewDidLoad裏,不然會報一個錯誤:whose view is not in window hierarchy!
 

頁面之間傳值

 
之前用-presentModalViewController:animated:方法來跳轉的時候,通常須要經過delegate等方式來傳值,如今一概用segue API就能搞定
 
在segue發生以前,先會調用當前View Controller的-prepareForSegue:sender:方法,能夠在裏面作一些處理,好比:
Objc代碼   收藏代碼
  1. BootstrapViewController* targetController = [segue destinationViewController];// 拿到目標view controller,而後要怎麼樣均可以了  
不過這裏要注意的是,彷佛不能在prepareForSegue方法裏設置destination view controller的view,由於這個時候view尚未被storyboard實例化。不過能夠先傳參,後面再設置
 
另外網上看到不少帖子,都說從B回到A的時候若是也須要傳值,能夠把A設置成B的delegate:
Objc代碼   收藏代碼
  1. BViewController.delegate = self;  
這裏我不是很理解,當從B回到A的時候,也設置一個segue彷佛就好了
 

unwind segue

 
unwind segue比較特殊,是在目標View Controller裏先設置一個action,而後在source View Controller裏拖線到exit圖標上。這種狀況下,除了會調用source的prepareForSegue方法之外,target View Controller的那個action也會被調用。
相關文章
相關標籤/搜索