在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:方法
- - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- {
- if ([[segue identifier] isEqualToString:@"ShowSightingsDetails"])
- {
- DetailViewController *detailViewController = [segue destinationViewController];
- detailViewController.sighting = [self.dataController objectInListAtIndex:[self.tableView indexPathForSelectedRow].row];
- }
- if ([[segue identifier] isEqualToString:@"ShowAddSightingView"])
- {
- AddSightingViewController *addSightingViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0];
- addSightingViewController.delegate = self;
- }
- }
這個實現方法代碼是用來處理在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操作。這兩個按鈕操作的方法在主視圖控制器中實現。
- - (void)addSightingViewControllerDidCancel:(AddSightingViewController *)controller
- {
- [self dismissViewControllerAnimated:YES completion:NULL];
- }
- - (void)addSightingViewControllerDidFinish:(AddSightingViewController *)controller name:(NSString *)name location:(NSString *)location {
- if ([name length] || [location length]) {
- [self.dataController addBirdSightingWithName:name location:location];
- [[self tableView] reloadData];
- }
- [self dismissModalViewControllerAnimated:YES];
- }
在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兩個操作。