之前在网上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想触发跳转的地方(就比如点击按钮,则在按钮的点击事件的方法中)添加下面代码

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

则可实现跳转。

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

1
[self dismissModalViewControllerAnimated:true];

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

页间传值

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

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

1
2
3
4
5
6
-(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方法来传值,下面给一个示例

定义协议

1
2
3
4
5
@protocol HGReturnView1Delegate <nsobject>
 
-(void) setReturnText:(NSString *) value;
 
@end</nsobject>

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

1
@property (weak,nonatomic) id delegate;

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

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

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

1
2
NSObject<hgreturnview1delegate> *tmpDele=self.delegate;
[tmpDele setReturnText: self.txtReturn.text];</hgreturnview1delegate>

到这里页间传值就完成了。

from:cocoschina

iOS使用StroryBoard页面跳转及传值的更多相关文章

  1. iOS——使用StroryBoard页面跳转及传值

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

  2. Android中实现activity的页面跳转并传值

    一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...

  3. H5页面跳转与传值

    页面之间的跳转经常使用a标签,使用mvc框架的都是通过访问controller的请求方法,返回请求页面.但本次开发,前端与后台完全分离,前端APP使用HBuider来开发,后台数据就无法使用mvc框架 ...

  4. Intent实现页面跳转和传值

    *Intent称为意图,是Android各大组件连接的桥梁 1.Activity页面跳转 同一个包内 Intent intent = new Intent(); intent.setClass(Mai ...

  5. MVC 【Razor 视图引擎】基础操作 --页面跳转,传值,表单提交

    ASPX  与  Razor  仅仅是视图不一样. 新建项目----ASP.NET MVC 4 Web 应用程序------选择模板(空).视图引擎(Razor ) 1.视图中 c# 代码  与 HT ...

  6. flutter -------- 页面跳转和传值

    在安卓原生开发中,页面跳转可以用Intent类来具体实现: Intent intent =new Intent(MainActivity.this,second.class); startActivi ...

  7. swift 下storyboard的页面跳转和传值

    ------------------1. 最简单的方法 拖拽, 这个就不用多解释了吧. 直接拖拽到另一个视图控制器, 选择 show, 就行了. 2. 利用 Segue 方法 (这里主要是 方法1 的 ...

  8. MUI 页面跳转(传值+接收)

    官方:做web app,一个无法避开的问题就是转场动画:web是基于链接构建的,从一个页面点击链接跳转到另一个页面, 如果通过有刷新的打开方式,用户要面对一个空白的页面等待: 如果通过无刷新的方式,用 ...

  9. Android tab_Host页面跳转,传值,刷新等问题汇总

    之前做了一个项目是关于Tab_Host的,现在完成了恰逢闲余写份总结,主要涉及里面遇到问题以及解决方案的. (首先说明这份代码是在eoe 下载的,这里感谢分享的那位朋友,限于我的工程是公司的不能拿出来 ...

随机推荐

  1. UVa 543 - Goldbach's Conjecture

    题目大意:给一个偶数,判断是否是两个素数的和. 先用sieve方法生成一个素数表,然后再进行判断即可. #include <cstdio> #include <vector> ...

  2. scala系列--基础语法

    Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 区分大小写 -  Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 类 ...

  3. 详解Grunt插件之LiveReload实现页面自动刷新(两种方案)

    http://www.jb51.net/article/70415.htm    含Grunt系列教程 这篇文章主要通过两种方案详解Grunt插件之LiveReload实现页面自动刷新,需要的朋友可以 ...

  4. Samba匿名用戶仅仅唯读访问

      NAS(Network Attached Storage),网络附加存储需要支持NFS(Network File System)和CIFS(Common Internet File Sysem)一 ...

  5. error: WatchKit App doesn't contain any WatchKit Extensions whose WKAppBundleIdentifier matches

    error: WatchKit App doesn't contain any WatchKit Extensions whose WKAppBundleIdentifier matches &quo ...

  6. PHP根据URL提取根域名

    <?php #使用示例 echo getBaseDomain('http://blog.jp.goo.ne.jp/index.php')->domain;echo "\n&quo ...

  7. Java 字符终端上获取输入三种方式

    http://blog.csdn.net/hongweigg/article/details/14448731 在Java 字符终端上获取输入有三种方式: 1.java.lang.System.in ...

  8. ASP.NET - 自定义控件处理页面事件(控件与页面数据交互)的方法

    //用委托的方法实现 //控件代码 public delegate void DelegateFunction( string sPageTitle ); private DelegateFuncti ...

  9. jQuery disabled 元素

    http://www.jb51.net/article/19342.htm 在jquery中可以通过jqueryObj.attr("disabled","disabled ...

  10. 如何做到Zero Downtime重启Go服务?

    graceful的实践 使用endless库来实现,比如接入gin: r := gin.Default() r.GET("/", index) endless.ListenAndS ...