zoukankan      html  css  js  c++  java
  • iOS——使用StroryBoard页面跳转及传值

      之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的。这篇就只介绍利用storyboard进行页面跳转与传值。

    新建页面

      iOS的程序也是使用了MVC的思想,页面文件与代码文件是分离的,这点与Android的类似。在使用storyboard的方式中,新建页面只需要在storyboard中拖入一个View Controller则可,

    接下来就可以在新建的页面中添加各种控件来编辑这个新建的页面。

      在新建的页面上编排各种视图控件如同在Android中编辑那个布局的xml,但是要让程序代码与这个视图关联,需要做一些操作。首先必不可少是建立一个相关联的类,此时需要新建一个Objective-C的class,基类就选择对应的View Controller基类,这里就最简单的UIViewController,With XIB for user Interface那个复选框不能勾,点击完成便可成功建立一个View Controller。

    回到stroyboard视图,选择刚刚新建的视图页面,点击下图的红框框住的部分

    在下图红框处选择对应的View Controller,这样就把视图与程序代码文件View Controller关联上了

    页面跳转

      建立完新页面就可以进行页面间的跳转,最简单的跳转则是用类似建立控件Outlet或者绑定事件一样,按住Ctrl键然后拖动到要跳转到的页面上,然后在弹出的窗口选择modal

    在运行程序后点击按钮就可以实现跳转。

          另一种跳转的方式则是在起始页面按着Ctrl键然后拖动到目标页面中,弹出窗口的选项跟上面的一样,然后选中两个页面连线,在下图红框处给这个Segue命名

    ,最后在View Controller想触发跳转的地方(就比如点击按钮,则在按钮的点击事件的方法中)添加下面代码

    [self performSegueWithIdentifier:@“segue的名” sender:nil]; 

    则可实现跳转

          跳转到新的页面后要返回上一个页面,则在需要返回的地方添加以下代码

    [self dismissModalViewControllerAnimated:true];

    参数true与false代表的是跳转的页面的切换时是否使用动画

    页间传值

          页面间值的传递最简单的方式是定义一个全局变量,无论是跳转还是返回,都可从该变量中get/set到值,如果不用这种方式,跳转时传值可以使用prepareForSegue sender 方法,返回时可以使用协议的方式,下面分别来看看。

      使用prepareForSegue sender 方法来传递值,需要先在目标页面的View Controller的类声明处声明传递参数的属性,比如那个属性就叫value1吧,接着在起始页的地方实现方法

    -(void) prepareForSegue: (UIStoryBoardSegue *)segue sender: (id)
    {
           if([segue.identifier compare:@"mySegue"]==NO)
        {
            id page2=segue.destinationViewController;
            [page2 setValue:self.lbUserName2.text forKey:@"value1"];
        }
    }

    起到传值作用是 setValue forKey的方法,segue的destinationViewController可以获取到当前Segue所跳到的目标页面的View Controller。这里有一个判断,用于判别这个跳转动作的segue是否是需要传值的那个segue,因为如果一个页面会有多个Segue跳转到不同的页面,不这样区分,在目标页面的View Controller中没有相应的参数时则会抛出异常。

          采用协议的方式进行返回时传值,思想是这样的,定义相关的协议,协议是给起始页实现的,目的在于开放一些供赋值的方法给目标页面调用,目标页面在返回的时候就调用那些方法来把返回值传回给起始页面,目标页面如何获取起始页的实例呢,那就通过页面上面的setValue forKey方法来传值,下面给一个示例

    定义协议

    @protocol HGReturnView1Delegate <NSObject>
    
    -(void) setReturnText:(NSString *) value;
    
    @end

    起始页面需要实现该协议,实现部分的代码就不贴出来了。目标页的声明处需要定义一个上面的协议属性

    @property (weak,nonatomic) id delegate;

    在页面跳转时传值时就调用以下代码

    [self setValue:self forKey:@”delegate”];

    在返回的时候需要用到delegate属性进行强制转换,转换后调用setReturnText方法

    NSObject<HGReturnView1Delegate> *tmpDele=self.delegate;
    [tmpDele setReturnText: self.txtReturn.text];
  • 相关阅读:
    implicit request ?
    Scala curly braces & parenthesis
    play framework Reads[A] and, andThen, reduce
    play framework 中耍 JSON 基礎
    asynchronous
    第一次接觸sbt會遇到的
    SBT, activator, play之間的糾葛
    leetcode67
    leetcode26
    leetcode341
  • 原文地址:https://www.cnblogs.com/HopeGi/p/4117875.html
Copyright © 2011-2022 走看看