Xcode6 StoryBoard页面跳转和传值

来源:互联网 发布:织梦cms 首页轮播 编辑:程序博客网 时间:2024/04/30 02:58

先来看下面的一副图:


这幅图展示了segue的类型:

Show

根据当前屏幕中的内容,在master area或者detail area中展示内容。

例如:如果app当前同时显示master和detail视图,内容将会压入detail区域。

           如果app当前仅显示master或者detail视图,内容则压入当前视图控制器堆栈中的顶层视图。


Show Detail

在detail area中展现内容。

例如:即使app同时显示master和detail视图,那么内容将被压入detail区域

           如果app当前仅显示Master或者detail视图,那么内容将替换当前视图控制器堆栈中的顶层视图。


Present Modally

使用模态展示内容。属性面板中提供presentation style (UIModalPresentationStyle)与 transition style (UIModalTransitionStyle)两种选项

Present as Popover

在某个现有视图中的锚点处使用弹出框展示内容。这个选项可指定显示在弹出框视图一边上的箭头可用方向,同时也是指定锚点视图的一个选项。

custom

根据自己的需求,自定义segue


总结:对已iphone开发来说主要用到Show ,Present Modally,custom。show相当于push,NavigationController中的栈式跳转;Present Modally相当于Present,模态跳转。而Present Modally和Present as Popover主要用在iPad开发中。



1、跳转

程序员们只需要进行拖线就能搞定页面之间的跳转,记得给每个segue设置identifier,从而区别开始是哪一个segue:如下图


在红色ViewController的button上按住control键拖线到黄色ViewController,sugue的类型选择show,在黄色ViewController的button上按住control键拖线到粉红ViewController,sugue的类型选择present Modal;运行程序就能看到不同了。


2、返回

返回一般有两种方式:1、代码实现 ; 2、使用ViewController中的Exit结合-(IBAciton)XXX(UIStoryboarySegue *)segue函数来完成;

第一种代码实现如下:

show类型的segue:

- (void)backToUpperVc:(UIBarButtonItem *)barButtonItem

{

    [self.navigationControllerpopViewControllerAnimated:YES];

}

present Modal类型的segue:

- (IBAction)backToYellow:(id)sender 

{

    [selfdismissViewControllerAnimated:YEScompletion:nil];

}


第二种使用ViewController中的Exit结合-(IBAciton)XXX(UIStoryboarySegue *)segue函数来完成;

假设从黄色ViewController返回到红色ViewController,步骤如下

(1)在红色ViewController里实现下面的方法:

- (IBAction)unWindSegue:(UIStoryboardSegue *)segue{}

注意点:1、返回值必须是IBAction,参数必须是UIStoryboardSegue,名字无所谓

                 2、此方法写在要返回的ViewController里

(2)当定义完上面的方法之后,对Storyboard操作如下:

右键点击红色ViewController的第三个按钮Exit,就会看到刚才定义的方法,然后拖线到黄色ViewController的Button控件上,就会看到action的提示,点击提示就完成了返回的操作。


3、传值

假设从红色ViewController传值到黄色ViewController

(1)在黄色ViewController里声明一个属性

@property (weak,nonatomic)NSString *str;


(2)在红色的ViewController里实现下面的方法

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

   if ([segue.identifierisEqualToString:@"redToYellow"]) {

       YellowViewController *yellowVC = segue.destinationViewController;

//        [yellowVC setValue:@"传值成功" forKey:@"str"];

//        [yellowVC setStr:@"传值成功"];

        yellowVC.str =@"传值成功";

    }

}


4、反向传值

反向传值采用委托代理的方式实现,这里就不上代码了,具体实现请查阅资料

步骤如下:

(1)在主动方VC里声明协议代理方法和delegate

(2)在接收方VC里遵守协议并实现代理方法


转载自:http://blog.csdn.net/xiaonaiping061/article/details/48055317

0 0
原创粉丝点击