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

相关文章
相关标签/搜索