segue 分析小結

在iOS開發中,segue用來實現storyboard中源視圖控制器和目標視圖控制器連接,當segue被觸發時,系統將完成下列操作:

1、實例化目標視圖控制器
2、實例化一個新segue對象,該對象持有所有的信息
3、調用源視圖控制器的prepareForSegue:sender:方法,
4、調用segue的 perform 方法將目標控制器帶到屏幕上。這個動作行爲依賴segue的類型如modal,push,custom.modal segue告訴源視圖控制器present目標視圖控制器。

在源視圖控制器的prepareForSegue:sender:的方法中,執行任何必要的目標視圖控制器的屬性配置,包括委託設置(如目標視圖控制器有協議)。

 

 原文鏈接: http://mikixiyou.iteye.com/blog/1745995 )

在apple的文檔庫中第二個示例應用開發文檔中,介紹了這樣一個segue的使用例子。

在源視圖控制器實現代碼中,實現prepareForSegue:sender:方法

Objective-c代碼  收藏代碼
  1. - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  
  2. {  
  3.     if ([[segue identifier] isEqualToString:@"ShowSightingsDetails"])  
  4.     {  
  5.         DetailViewController *detailViewController = [segue destinationViewController];  
  6.         detailViewController.sighting = [self.dataController objectInListAtIndex:[self.tableView indexPathForSelectedRow].row];  
  7.     }  
  8.    
  9.     if ([[segue identifier] isEqualToString:@"ShowAddSightingView"])  
  10.     {  
  11.         AddSightingViewController *addSightingViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0];  
  12.         addSightingViewController.delegate = self;  
  13.     }  
  14. }  

 

這個實現方法代碼是用來處理在storyboard中配置的從主視圖控制器到不同的兩個視圖控制器的segue。這兩個segue通過它們的identifier屬性進行判斷。


在identifier爲"ShowSightingsDetails"的segue中,目標視圖控制器是一個展示明細信息的視圖控制器,使用的segue類型爲push。這種通常用於navigator視圖控制器中。
當用戶選擇表視圖中的一行時,segue發生。傳輸數據到目標視圖控制器,使目標控制器上能顯示sighting。

在identifier爲"ShowAddSightingView"的segue中,目標視圖控制器管理的是一個增加新的sighting信息的視圖,我們稱之爲add視圖控制器。它是不需要從主視圖控制器(源)傳什麼數據過來的。但是,主視圖控制器需要獲取在add視圖控制器(目標)上輸入的數據。
實現方式是採用delegate,將主視圖控制器設置爲add視圖控制器(目標)的委託。在目標視圖控制器上執行它的委託中方法,該方法需要先在主視圖控制器的實現代碼中實現,方法包括如何讀取add視圖控制器的數據,並dismiss掉add視圖控制器。

在add視圖控制器上,有兩個按鈕,用於執行cancel和done操作。這兩個按鈕操作的方法在主視圖控制器中實現。

Objective-c代碼  收藏代碼
  1. - (void)addSightingViewControllerDidCancel:(AddSightingViewController *)controller  
  2. {  
  3. [self dismissViewControllerAnimated:YES completion:NULL];  
  4. }  
  5.   
  6.   
  7. - (void)addSightingViewControllerDidFinish:(AddSightingViewController *)controller name:(NSString *)name location:(NSString *)location {  
  8. if ([name length] || [location length]) {  
  9. [self.dataController addBirdSightingWithName:name location:location];  
  10. [[self tableView] reloadData];  
  11. }  
  12. [self dismissModalViewControllerAnimated:YES];  
  13. }  

 

在add視圖控制器實現代碼中,調用它的委託中這兩個方法。


在storyboard中segue有三種類型,分別爲modal segue、push segue、custom segue。


modal segue

是一個視圖控制器(源)爲了完成一個任務而模態地(modally)呈現另一個視圖控制器(目標)。這個目標視圖控制器不是導航視圖控制器(navigation view controller)的棧中的一部分。
在任務完成後,使用delegate將呈現的視圖控制器(目標)釋放掉,應用界面切換到原來的視圖控制器(源)上。

這個過程的實現代碼可以看成是present和dismiss兩個操作。

 

push segue
是將另一個視圖控制器壓入到導航控制器的棧中。它通常和導航視圖控制器(navigation view controller)一起使用。
新壓入的視圖控制器會有一個回退按鈕,可以退回來上一層。

這個過程的實現代碼可以看成是push和pop兩個操作。

 

發佈了15 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章