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
相关文章
- 我的solr学习笔记--solr admin 页面 检索调试
- 学习ASP.NET Core Blazor编程系列五——列表页面
- 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 【测试工具】JMeter学习 —— Badboy使用和录制
- (《机器学习》完整版系列)第9章 聚类——9.4 高斯混合模型EM算法详细推导
- opencv学习笔记(四)投影
- Android学习群群内分享:Android面试中的那些高频知识点解析
- 《模式识别》学习笔记(十二)一般情况下判别函数权矢量算法
- 学习Python的第一节课(附安装教程)
- [Django学习]Ajax访问静态页面
- 思考要不要学习Python
- ThinkPHP 学习笔记 ( 一 ) 项目部署:应用部署方式与模块分组部署方式
- Thinkphp学习笔记6-redirect 页面重定向
- IOS学习之蓝牙4.0
- 大数据学习——flume安装部署
- 学习是什么
- Dynamic CRM 2013学习笔记(四十五)修改实体及字段的前缀(不用new_开头)
- Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试
- 微信小程序学习(四)路由页面配置
- SpringSecurity学习:简介、如何集成、拦截规则、忽略规则、自定义页面、参数详解、校验流程
- 什么是NoSQL?随着这次训练就来学习一下
- JVM学习笔记(一)------基本结构
- vue学习:使用tab标签页时,刷新页面停留在当前tab
- vue学习:打开/刷新一个页面时,触发一个后端请求
- 微信小程序学习第2天——模板语法与样式,全局配置与页面配置
- HTML5 + CSS3 页面结构学习笔记(五)