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. 【转载】如何解决failed to push some refs to git

    在使用git 对源代码进行push到gitHub时可能会出错,信息如下   此时很多人会尝试下面的命令把当前分支代码上传到master分支上. $ git push -u origin master ...

  2. 读书笔记 effective c++ Item 3 在任何可能的时候使用 const

    Const可以修饰什么?   Const 关键字是万能的,在类外部,你可以用它修饰全局的或者命名空间范围内的常量,也可以用它来修饰文件,函数和块作用域的静态常量.在类内部,你可以使用它来声明静态或者非 ...

  3. git版本控制系统常见操作总结

    简介 Git是强大的版本控制系统,主要功能是针对代码.配置文件等文本进行版本控制.备份等,同时个人认为还是分发代码的一个不错的方式. 常见用法 #创建远程git仓库 [root@test88 ~]# ...

  4. alias命令别名

    笔者在看<鸟哥私房菜>时,突然看到这个命令,之前未接触过,故简单记录学习下,具体的大家可参见man手册.功能说明:设置指令的别名.语 法:alias[别名]=[指令名称]参 数 :若不加任 ...

  5. python基础(7)--深浅拷贝、函数

    1.深浅拷贝 在Python中将一个变量的值传递给另外一个变量通常有三种:赋值.浅拷贝.深拷贝 Python数据类型可氛围基本数据类型包括整型.字符串.布尔及None等,还有一种由基本数据类型作为最基 ...

  6. centos6下mysql的主从复制的配置

    2015年9月17日 23:00:36 update 想要好好了解mysql复制,还是去看看<高性能MySQL>(第三版)好了,上面说的比较详细. =========== 在本地用virt ...

  7. 如何去除decimal后面的零?

    如何去除decimal后面的零? 1.260000m.ToString("G29") 不显示科学记数法? decimal.Parse("0.0000001",S ...

  8. day3 文件操作

    文件操作是在内存中进行操作的,因为文件是存储在内存中的. open函数,该函数用于文件处理: 操作文件时,一般需要经历如下步骤: (1)打开文件: (2)操作文件 一.打开文件 文件句柄 = open ...

  9. Loadrunner报错“Too many local variablesAction.c”解决方法

    问题描述,在Action.c里定义数组时如果数组长度过长,如char a[1024*1024]运行时即会报错: 意思为:太多的局部变量 问题原因及解决方法如下: 1. VuGen对于局部变量可以分配的 ...

  10. Redis实战配置(三)

    程序配置 我们安装好了Redis的系统服务,此时Redis服务已经运行. 现在我们需要让我们的程序能正确读取到Redis服务地址等一系列的配置信息,首先,需要在Web.config文件中添加如下信息: ...