StoryBoard学习(5):使用segue页面间传递数据
StoryBoard学习(5):使用segue页面间传递数据
函数:
- - (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之后添加:
- @synthesize page1Data;
重载prepareForSegue方法:
- -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
- NSString* data = page1Data.text;
- UIViewController* view = segue.destinationViewController;
- if ([view respondsToSelector:@selector(setParam:)]) {
- [view setValue:data forKey:@"param"];
- }
- }
注意:其中的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之后添加:
- @property (strong, nonatomic) NSString *param;
注意:这里定义的参数 param 必须和前面ViewController.m中的prepareForSegue方法中的param相同!!!
7.2 修改SecondViewController.m
在@implementation SecondViewController之后添加:
- @synthesize param;
- @synthesize page2Data;
修改方法viewDidLoad:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- page2Data.text=param;
- }
编译运行,当在第1页中输入参数,跳到第2页后可以显示第1页中输入的参数。
8. 给第2页中的按钮[关闭窗口]添加事件。
单独窗口打开SecondViewController.h和MainStoryboard,然后选中第2页中的按钮[关闭窗口],右键拖拽到SecondViewController.h中@interface SecondViewController : UIViewController之后;
在弹出窗口的Connection属性选择Action,Name属性设置为closeWin。然后点按钮[Connect]。
可以看到,在SecondViewController.h中增加了如下代码:
- - (IBAction)closeWin:(id)sender;
在SecondViewController.m中增加了如下代码:
- - (IBAction)closeWin:(id)sender {
- }
修改 SecondViewController.m中的closeWin方法,具体代码如下:
- - (IBAction)closeWin:(id)sender {
- [self dismissViewControllerAnimated:YES completion:nil];
- }
编译运行,当显示第2页后,点击[关闭窗口]按钮,即可关闭第2页,重新显示第1页。
接下来,要实现在第2页修改接收到的参数,然后将修改后的参数返回给第1页。
9. 修改 ViewController.h和.m文件内容。
9.1 ViewController.h
在 @interface ViewController : UIViewController 之后添加:
- @property (strong,nonatomic) NSString* editData;
注意:定义的变量 editData 是用来接收 第2页编辑输入框的内容,在 SecondViewController.m会用到!!!
9.2 ViewController.m
在 @implementation ViewController 之后添加:
- @synthesize editData;
修改方法 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
- NSString* data = page1Data.text;
- UIViewController* view = segue.destinationViewController;
- if ([view respondsToSelector:@selector(setParam:)]) {
- [view setValue:data forKey:@"param"];
- }
- if ([view respondsToSelector:@selector(setFirstViewController:)]) {
- [view setValue:self forKey:@"firstViewController"];
- }
- }
注意:其中的 setFirstViewController 和 firstViewController 在下面的 SecondViewController.h和.m中会定义!!!
重载方法 -(void)viewWillAppear:(BOOL)animated :
- -(void)viewWillAppear:(BOOL)animated{
- NSLog(@"viewWillAppear");
- [super viewWillAppear:animated];
- page1Data.text=editData;
- }
10. 修改 SecondViewController.h和.m文件内容。
10.1 SecondViewController.h
在 @interface SecondViewController : UIViewController 之后添加:
- @property (strong,nonatomic) id firstViewController;
注意:变量名称 firstViewController必须和上面ViewController.m中相同!!!
10.2 SecondViewController.m
在 @implementation SecondViewController 之后添加:
- @synthesize firstViewController;
重载方法 -(void)viewWillDisappear:(BOOL)animated
- -(void)viewWillDisappear:(BOOL)animated{
- [super viewWillDisappear:animated];
- if ([firstViewController respondsToSelector:@selector(setEditData:)]) {
- [page2Data endEditing:YES];
- [firstViewController setValue:page2Data.text forKey:@"editData"];
- }
- }
注意:其中的 setEditData 和 editData 必须和上面 ViewController.h和.m中定义的相同!!!
OK,编译运行。第1页的输入文字会传递到第2页的输入框中,第2页的输入框文字在关闭窗口后同样会传递给第1页的输入框中。
原文:http://stephen830.iteye.com/blog/1696614
StoryBoard学习(5):使用segue页面间传递数据的更多相关文章
- 在微信小程序页面间传递数据总结
在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...
- 对于vue和react“页面间”传递数据的理解误区
前言 如果我们想要实现多个标签页之间的通信,可以使用localStorage.cookie等,但是能不能用vue或react呢? 结论 答案是NO,因为vue和react虽然可以在“多个”页面之间传递 ...
- 开发 | 如何在微信小程序的页面间传递数据?
我们在之前发布过小程序页面传值方法的简单介绍,说明了在小程序开发中,两种常见的页面之间传值方法. 本期,知晓程序(微信号 zxcx0101)为你带来的是「倒数记日」小程序开发者带来的,小程序开发中,有 ...
- Windows Phone 几种页面间传递数据的方式
首先,我们要引用:using Microsoft.Phone.Shell; 第一种: // 导航到新页面 NavigationService.Navigate(new Uri("/Detai ...
- react-native页面间传递数据的几种方式
1. 利用react-native 事件DeviceEventEmitter 监听广播 应用场景: - 表单提交页面, A页面跳转到B页面选人, 然后返回A页面, 需要将B页面选择的数据传回A页面. ...
- php 页面间传递数据
b.php <?php function getClientIP() { if (getenv("HTTP_CLIENT_IP")) $ip = getenv("H ...
- 小菜学习Winform(五)窗体间传递数据
前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...
- ios页面间传递参数四种方式
ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...
- Java WEB 之页面间传递特殊字符
本文是学习网络上的文章时的总结以及自己的一点实践.感谢大家无私的分享. 昨天在做项目的时候,有一个页面间传递特殊字符的需求,查了一些资料.如今将自己的经验写出来. 首先.在前台编码 var fckPu ...
随机推荐
- 【转载】如何解决failed to push some refs to git
在使用git 对源代码进行push到gitHub时可能会出错,信息如下 此时很多人会尝试下面的命令把当前分支代码上传到master分支上. $ git push -u origin master ...
- 读书笔记 effective c++ Item 3 在任何可能的时候使用 const
Const可以修饰什么? Const 关键字是万能的,在类外部,你可以用它修饰全局的或者命名空间范围内的常量,也可以用它来修饰文件,函数和块作用域的静态常量.在类内部,你可以使用它来声明静态或者非 ...
- git版本控制系统常见操作总结
简介 Git是强大的版本控制系统,主要功能是针对代码.配置文件等文本进行版本控制.备份等,同时个人认为还是分发代码的一个不错的方式. 常见用法 #创建远程git仓库 [root@test88 ~]# ...
- alias命令别名
笔者在看<鸟哥私房菜>时,突然看到这个命令,之前未接触过,故简单记录学习下,具体的大家可参见man手册.功能说明:设置指令的别名.语 法:alias[别名]=[指令名称]参 数 :若不加任 ...
- python基础(7)--深浅拷贝、函数
1.深浅拷贝 在Python中将一个变量的值传递给另外一个变量通常有三种:赋值.浅拷贝.深拷贝 Python数据类型可氛围基本数据类型包括整型.字符串.布尔及None等,还有一种由基本数据类型作为最基 ...
- centos6下mysql的主从复制的配置
2015年9月17日 23:00:36 update 想要好好了解mysql复制,还是去看看<高性能MySQL>(第三版)好了,上面说的比较详细. =========== 在本地用virt ...
- 如何去除decimal后面的零?
如何去除decimal后面的零? 1.260000m.ToString("G29") 不显示科学记数法? decimal.Parse("0.0000001",S ...
- day3 文件操作
文件操作是在内存中进行操作的,因为文件是存储在内存中的. open函数,该函数用于文件处理: 操作文件时,一般需要经历如下步骤: (1)打开文件: (2)操作文件 一.打开文件 文件句柄 = open ...
- Loadrunner报错“Too many local variablesAction.c”解决方法
问题描述,在Action.c里定义数组时如果数组长度过长,如char a[1024*1024]运行时即会报错: 意思为:太多的局部变量 问题原因及解决方法如下: 1. VuGen对于局部变量可以分配的 ...
- Redis实战配置(三)
程序配置 我们安装好了Redis的系统服务,此时Redis服务已经运行. 现在我们需要让我们的程序能正确读取到Redis服务地址等一系列的配置信息,首先,需要在Web.config文件中添加如下信息: ...