Storyboard裏面的幾種Segue區別及視圖的切換:push,modal,popover,replace和custom

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

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

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

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

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

  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操做。這兩個按鈕操做的方法在主視圖控制器中實現。
ide

  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兩個操做。動畫

 

原文連接: http://mikixiyou.iteye.com/blog/1745995 ui

 

 

 

視圖切換類型介紹
在storyboard中,segue有幾種不一樣的類型,在iphone和ipad的開發中,segue的類型是不一樣的。
在iphone中,segue有:push,modal,和custom三種不一樣的類型,這些類型的區別在與新頁面出現的方式。
而在ipad中,有push,modal,popover,replace和custom五種不一樣的類型。
modal 模態轉換
 
最經常使用的場景,新的場景徹底蓋住了舊的那個。用戶沒法再與上一個場景交互,除非他們先關閉這個場景。
是在viewController中的標準切換的方式,包括淡出什麼的,能夠選切換動畫。
Modalview:就是會彈出一個view,你只能在該view上操做,而不能切換到其餘view,除非你關閉了modalview.
Modal View對應的segue type就是modal segue。
*Modal:Transition to another scene for the purposes of completing a task.當user在彈出的modalview裏操做完後,就應該dismiss the modal view scene而後切換回the originalview.
pushspa

Push類型通常是須要頭一個界面是個Navigation Controller的。
是在navigation View Controller中下一級時使用的那種從右側劃入的方式
*Push:Create a chain of scenes where the user can move forward or back.該segue type是和navigation viewcontrollers一塊兒使用。
popover(iPad only)
 
popover 類型,就是採用浮動窗的形式把新頁面展現出來
*Popover(iPad only):Displays the scene in a pop-up 「window」 over top of the current view.
 
 
*Replace (iPad only):
 
替換當前scene,
Replace the current scene with another. This is used in some specialized iPad viewcontrollers (e.g. split-view controller).
customcode

就是自定義跳轉方式啦。
*Custom:Used for programming a customtransition between scenes.
在Storyboard中使用自定義的segue類型orm

 

Storyboard使用
若是你是建立新項目,Xcode模版能夠提供一個配置好的Storyboard供你使用。對於其它的應用,使用Storyboard的過程以下:
一、配置應用程序Info.plist文件
添加UIMainStoryboardFile ,值爲storyboard的文件名。
刪除原來的NSMainNibFile
二、像之前建立xib文件同樣建立一個storyboard文件
三、配置 storyboard中的viewControllerhtm

 

Storyboard的建立
            你能夠用InterfaceBuilder 去爲你的應用程序建立一個Stroyboard,通常來講一個應用使用一個 Storyboard就夠了,可是若是你想建立多個也是能夠的,只要你願意。一個 Stroyboard應該至少含有一個ViewController。
            在iPhone中,對於每個在Storyboard的ViewController都管理着一個scene,每一個scene又管理着screen上的東東,但對於iPad來講,多個scene能夠同時呈如今一個screen上。你能夠從library中拖拽viewController到你的Storyboard上。
            當你想關聯兩個viewController時,你能夠按着control鍵,用鼠標從一個ViewController中的button,table view cell…拖拽鏈接到另外一個你想跳轉到的ViewController,這樣就建立了一個segue,不要忘記設置identifier哦。

 

 

 

 

 Scene之間的數據傳遞
            當你從當前 scene中觸發一個segue的時候,系統會自動調用prepareForSegue:sender:這個方法。若是你想從一個界面切換到裏另外一個界面的時候傳遞數據,你應該override這個方法。
A---》B
想把數據  NSString A_data   從AController傳到BController,則在BController中 
@property 一個NSString data
而後在AController中添加方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"The segue id is %@", segue.identifier );
    UIViewController *destination = segue.destinationViewController;  
    if ([destination respondsToSelector:@selector(setData:)])
    {
        [destination setValue:@"這是要傳遞的數據" forKey:@"data"];
    }   
}
以後,Bcontroller中的data屬性,就接收到數據了

 

ViewController之間的跳轉
            一、若是在 Storyboard中當前的 ViewController和要跳轉的ViewController之間的segue存在,則能夠執行performSegueWithIdentifier:sender:這個方法實現跳轉。
            二、若是目標ViewController存在Storyboard中,可是沒有segue。你能夠經過UIStoryboard的instantiateViewControllerWithIdentifier:這個方法獲取到它,而後再用你想要的方式實現跳轉,如:壓棧。
            三、若是目標ViewController不存在,那就去建立它吧。

 

原文連接:http://www.2cto.com/kf/201210/161737.html

相關文章
相關標籤/搜索