srotyboard之间传值

原文出自:http://blog.csdn.net/panyaorui/article/details/8610144

srotyboard之间传值

假设view controller1下有一个button1和一个textField1,view controller2下有一个button2和一个textField2,我们要实现摁下button1将textField1的内容传送给textField2,按下button2将textField2的内容传送给textField1。

首先还是要将textField1和textField2使用右键拖动的方式在各自的h文件下命名好调用



1、textField1传送给textField2

使用segue代理的方式。

1)、在view controller2的Page2ViewController.h文件下设置一个NSString类型的变数,它的目的是用来接收由页面 1 透过 Storyboard Segue 所传过来的资讯,程式码如下。

@property (weak, nonatomic) NSString *exchangeString;  

//别忘了在对应的实作档中加入@synthesize string;  

2)、设定在view controller2加载的时候即将textField2的text设置为传递过来的exchangeString

- (void)viewDidLoad

{

   [superviewDidLoad];

   textField2.text = exchangeString;

}

3)、在view controller1的m文件中调用prepareForSegue:sender:方法将值传递给textField2

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

   //将page2设定成Storyboard Segue的目标UIViewController  

   id page2 = segue.destinationViewController;   

   //将值透过Storyboard Segue带给页面2的string变数  

   [page2 setValue:textField1.textforKey:@"exchangeString"];  

}  

4)、虽然做到上面这步已经可以正确传递值了,但是如果直接运行,会发现textField1的弹出框一旦弹出就无法关闭。所以还需要执行如下操作:

在storyboard中选中textField1,使用右键拖动的方式建立一个Action



然后将此方法在m文件中实现出来

- (IBAction)closeTextField:(id)sender {

   [sender resignFirstResponder];

}

 

2、textField2返还传送给textField1

将会用到代理和协议的方式。

透过建立一个协定 @protocol 的方式,让其它的採纳此协定的 class 可以实作协定内的函式,我们在页面 2 的 UIViewController class 里设置一个协定,并且在页面 1 的 UIViewController class 里实作协定里的方法,让程式执行到页面 2 时,仍然能够取得页面 1 的实例 Instance,进而使用协定里的方法来设定 textField 2的数值。

1)、在页面2的Page2ViewController.h文件下设定协议

//建立一个协定  

@protocol Page2Delegate  

//协定中的方法  

- (void)passValue:(NSString *)value;  

@end  

同时在Page2ViewController类的声明里添加一个协议的物件

@interface Page2ViewController : UIViewController

- (IBAction)returnToFirstPage:(id)sender;

@property (weak, nonatomic) IBOutletUITextField *textField2;

@property (weak, nonatomic) NSString *exchangeString;  

//宣告一个採用Page2Delegate协定的物件  

@property (weak, nonatomic) id delegate;   //记得@synthesize

@end

 

2)、设定该协议物件记录值的位置,肯定是在返回第一个View Controller的时候记录咯

- (IBAction)returnToFirstPage:(id)sender {  

   [selfdismissViewControllerAnimated:YEScompletion:^{}];  

   //呼叫协定中的方法并带入page2textField的数值  

   [delegatepassValue:textField2.text];  

}  

3)、在view controller1的m文件中实现协议相关内容

首先声明调用定义协议的h文件(可以放到h文件中)

//引用持有Page2Delegate协定的class  

#import "Page2ViewController.h"  

然后实现协议约定的方法

- (void)passValue:(NSString *)value {  

   //设定page1TextField为所取的的数值  

   textField1.text = value;  

}  

4)、重点提出的:记得要将代理 delegate 设成自己

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  

   //将page2设定成Storyboard Segue的目标UIViewController  

   id page2 = segue.destinationViewController;     

   //将值透过Storyboard Segue带给页面2的string变数  

   [page2 setValue:textField1.textforKey:@"exchangeString"];  

   //将delegate设成自己(指定自己为代理)  

   [page2 setValue:selfforKey:@"delegate"];  

}  

运行前要将textField2也做一个点击Return Key缩小小键盘的设定,方法参照textField1的做法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值