StoryBoard学习(5):使用segue页面间传递数据

函数:

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

具体例子:

1.首先创建1个Single View模版项目,然后在MainStoryboard中添加1个新的ViewContronller。并在2个View Controller中添加标签、按钮、编辑输入框。

2. 将第1页和第2页建立segue。

选中第1页中的按钮[跳到第2页],鼠标右键(或按住Controll键,鼠标左键)拖拽到第2页后,放手,在弹出菜单上选择[modal]

3. 将第1页中的编辑输入框组件与class文件挂钩。

单独窗口打开MainStoryboard和ViewController.h文件,然后鼠标右键拖拽编辑输入框到.h文件中的@interface的下一行。

注意,编辑输入框组件的name属性这里设置为 page1Data

4.在ViewController.m中添加如下代码。

在@implementation之后添加:

  1. @synthesize page1Data;

重载prepareForSegue方法:

  1. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
  2. NSString* data = page1Data.text;
  3. UIViewController* view = segue.destinationViewController;
  4. if ([view respondsToSelector:@selector(setParam:)]) {
  5. [view setValue:data forKey:@"param"];
  6. }
  7. }

注意:其中的setParam和param会和下面的代码进行关联!!

5.添加新类文件并绑定给第2页。

注意:Class名为 SecondViewController

将类SecondViewController绑定到第2页.

6.将第2页中的编辑输入框组件绑定到类SecondViewController中。

单独窗口打开SecondViewController.h和MainStoryboard,然后选中第2页中的编辑输入框,然后鼠标右键拖拽编辑输入框到SecondViewController.h文件中的@interface的下一行。

注意:绑定时编辑输入框组件的name属性设置为 page2Data。

7.修改SecondViewController的.h和.m文件。

7.1 修改SecondViewController.h

@interface SecondViewController : UIViewController之后添加:

  1. @property (strong, nonatomic) NSString *param;

注意:这里定义的参数 param 必须和前面ViewController.m中的prepareForSegue方法中的param相同!!!

7.2 修改SecondViewController.m

在@implementation SecondViewController之后添加:

  1. @synthesize param;
  2. @synthesize page2Data;

修改方法viewDidLoad:

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. // Do any additional setup after loading the view.
  5. page2Data.text=param;
  6. }

编译运行,当在第1页中输入参数,跳到第2页后可以显示第1页中输入的参数。

8. 给第2页中的按钮[关闭窗口]添加事件。

单独窗口打开SecondViewController.h和MainStoryboard,然后选中第2页中的按钮[关闭窗口],右键拖拽到SecondViewController.h中@interface SecondViewController : UIViewController之后;

在弹出窗口的Connection属性选择Action,Name属性设置为closeWin。然后点按钮[Connect]。

可以看到,在SecondViewController.h中增加了如下代码:

  1. - (IBAction)closeWin:(id)sender;

在SecondViewController.m中增加了如下代码:

  1. - (IBAction)closeWin:(id)sender {
  2. }

修改 SecondViewController.m中的closeWin方法,具体代码如下:

  1. - (IBAction)closeWin:(id)sender {
  2. [self dismissViewControllerAnimated:YES completion:nil];
  3. }

编译运行,当显示第2页后,点击[关闭窗口]按钮,即可关闭第2页,重新显示第1页。

接下来,要实现在第2页修改接收到的参数,然后将修改后的参数返回给第1页。

9. 修改 ViewController.h和.m文件内容。

9.1 ViewController.h

在 @interface ViewController : UIViewController 之后添加:

  1. @property (strong,nonatomic) NSString* editData;

注意:定义的变量 editData 是用来接收 第2页编辑输入框的内容,在 SecondViewController.m会用到!!!

9.2 ViewController.m

在 @implementation ViewController 之后添加:

  1. @synthesize editData;

修改方法 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

  1. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
  2. NSString* data = page1Data.text;
  3. UIViewController* view = segue.destinationViewController;
  4. if ([view respondsToSelector:@selector(setParam:)]) {
  5. [view setValue:data forKey:@"param"];
  6. }
  7. if ([view respondsToSelector:@selector(setFirstViewController:)]) {
  8. [view setValue:self forKey:@"firstViewController"];
  9. }
  10. }

注意:其中的 setFirstViewController 和 firstViewController 在下面的 SecondViewController.h和.m中会定义!!!

重载方法 -(void)viewWillAppear:(BOOL)animated :

  1. -(void)viewWillAppear:(BOOL)animated{
  2. NSLog(@"viewWillAppear");
  3. [super viewWillAppear:animated];
  4. page1Data.text=editData;
  5. }

10. 修改 SecondViewController.h和.m文件内容。

10.1 SecondViewController.h

在 @interface SecondViewController : UIViewController 之后添加:

  1. @property (strong,nonatomic) id firstViewController;

注意:变量名称 firstViewController必须和上面ViewController.m中相同!!!

10.2 SecondViewController.m

在  @implementation SecondViewController 之后添加:

  1. @synthesize firstViewController;

重载方法 -(void)viewWillDisappear:(BOOL)animated

  1. -(void)viewWillDisappear:(BOOL)animated{
  2. [super viewWillDisappear:animated];
  3. if ([firstViewController respondsToSelector:@selector(setEditData:)]) {
  4. [page2Data endEditing:YES];
  5. [firstViewController setValue:page2Data.text forKey:@"editData"];
  6. }
  7. }

注意:其中的  setEditData 和  editData 必须和上面 ViewController.h和.m中定义的相同!!!

OK,编译运行。第1页的输入文字会传递到第2页的输入框中,第2页的输入框文字在关闭窗口后同样会传递给第1页的输入框中。

原文:http://stephen830.iteye.com/blog/1696614

StoryBoard学习(5):使用segue页面间传递数据的更多相关文章

  1. 在微信小程序页面间传递数据总结

    在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...

  2. 对于vue和react“页面间”传递数据的理解误区

    前言 如果我们想要实现多个标签页之间的通信,可以使用localStorage.cookie等,但是能不能用vue或react呢? 结论 答案是NO,因为vue和react虽然可以在“多个”页面之间传递 ...

  3. 开发 | 如何在微信小程序的页面间传递数据?

    我们在之前发布过小程序页面传值方法的简单介绍,说明了在小程序开发中,两种常见的页面之间传值方法. 本期,知晓程序(微信号 zxcx0101)为你带来的是「倒数记日」小程序开发者带来的,小程序开发中,有 ...

  4. Windows Phone 几种页面间传递数据的方式

    首先,我们要引用:using Microsoft.Phone.Shell; 第一种: // 导航到新页面 NavigationService.Navigate(new Uri("/Detai ...

  5. react-native页面间传递数据的几种方式

    1. 利用react-native 事件DeviceEventEmitter 监听广播 应用场景: - 表单提交页面, A页面跳转到B页面选人, 然后返回A页面, 需要将B页面选择的数据传回A页面. ...

  6. php 页面间传递数据

    b.php <?php function getClientIP() { if (getenv("HTTP_CLIENT_IP")) $ip = getenv("H ...

  7. 小菜学习Winform(五)窗体间传递数据

    前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...

  8. ios页面间传递参数四种方式

    ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...

  9. Java WEB 之页面间传递特殊字符

    本文是学习网络上的文章时的总结以及自己的一点实践.感谢大家无私的分享. 昨天在做项目的时候,有一个页面间传递特殊字符的需求,查了一些资料.如今将自己的经验写出来. 首先.在前台编码 var fckPu ...

随机推荐

  1. openjudge-NOI 2.6基本算法之动态规划 专题题解目录

    1.1759 最长上升子序列 2.1768 最大子矩阵 3.1775 采药 4.1808 公共子序列 5.1944 吃糖果 6.1996 登山 7.2000 最长公共子上升序列 8.2718 移动路线 ...

  2. c++鼠标点点,获取坐标值,放入到txt文件中

    // oj3.cpp : Defines the entry point for the console application.// #include "stdafx.h"#in ...

  3. nginx解析带中文的url重定向之后404问题

    首先,有这样一个需求:一个系统的图片存储是放在upyun上的,现在有个客户需要本地化部署,所以需要将图片进行本地存储.为了兼容,图片存储的路径格式保持和在upyun上的存储路径一致.在upyun上的存 ...

  4. P3960 列队

    这是NOIP 2017最后一道题 不知道这道题有没有人代码写的和我一样麻烦. Solution 30分暴力 维护每行每列的元素. 每次删除一个元素的时候, 需要修改一行一列 因此复杂度上界\(O(nm ...

  5. Oracle数据库(64位) 及 PLSQL(64位)的组合安装【第一篇】

    目前PC端普遍使用64位操作系统,64位操作系统在性能上比32位更佳,但是兼容性上则不如32的操作系统,Oracle提供了64和32两种版本,而PLsql工具则只有32位,在这篇文章详细的讲述了如何在 ...

  6. C++的一大误区——深入解释直接初始化与复制初始化的区别

      转自:http://blog.csdn.net/ljianhui/article/details/9245661 不久前,在博客上发表了一篇文章——提高程序运行效率的10个简单方法,对于其中最后一 ...

  7. day4 递归原理及解析

    递归 递归是一种调用自身的方法,在函数执行过程中重复不断的调用自身的过程,递归的规模每次都要缩小,一般前一步的程序作为后一步的参数.但是必须有递归结束条件. 递归算法是一种直接或者间接地调用自身算法的 ...

  8. java总结(方法与对象)

    包 1.用于管理类 2.包名采用公司的域名倒序+项目名+模块名 3.包的引入 类 1.main方法用static 它调用的方法也要static 2.程序要运行必须要main方法 3.类是一种引用数据类 ...

  9. PHP学习笔记(一)数组

    初始化数组的方法:统一初始化或逐项初始化. 遍历数组的方法: 1.FOR循环 2.DO...WHILE语句 3.WHILE语句 4.foreach foreach($arr as $key=>$ ...

  10. vue表格导入

    <input id="upload" type="file" @change="importfxx(this)"  accept=&q ...