iOS:切换视图时,反向传递数据方法二:代理

代理:

  1、发送信息的控制器设置一个代理,并自定义一个代理的方法,用来传递数据

  2、接受信息的控制器遵循发送信息的控制器的协议

  3、接受信息的控制器设置发送信息的控制器的代理为自己self

  4、接受信息的控制器实现协议中的方法,即接受数据

 

  首先将控制器通过modal(push)方式联接,同时设置segue的identifier标识,因为这个identifier是与目的控制器唯一的识别的方式,最后再进行代码操作。

1、所有文件:

2、让FirstViewController关联自己的类ViewController(.h/.m)

3、让SecondViewController关联自己的类SecondViewController(.h/.m)

4、设置segue的identifier标识

 

具体代码如下:

FirstViewController控制器关联的ViewController类

 1 #import "ViewController.h"
 2 #import "SecondViewController.h"
 3 
 4 @interface ViewController ()<SecondViewControllerDelegate>
 5 @property (weak, nonatomic) IBOutlet UITextField *firstTextField;
 6 
 7 @end
 8 
 9 @implementation ViewController
10 
11 - (void)viewDidLoad {
12     [super viewDidLoad];
13 }
14 
15 //重写该方法,视图切换时,自动调用
16 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
17 {
18     if([segue.identifier isEqualToString:@"modal"])
19     {
20         //获取目的控制器
21         SecondViewController *secondVC = segue.destinationViewController;
22         
23         //正向传数据
24         secondVC.information = self.firstTextField.text;
25         
26         //设置代理
27         secondVC.delegate = self;
28         
29     }
30 }
31 
32 #pragma mark -<SecondViewControllerDelegate>
33 //反向接受信息
34 -(void)FinishedInformation:(SecondViewController *)secondVC andinfo:(NSString *)infos
35 {
36     self.firstTextField.text = infos;
37 }
38 @end

SecondViewController控制器关联的SeconViewController类

 1 #import "SecondViewController.h"
 2 
 3 @interface SecondViewController ()
 4 @property (weak, nonatomic) IBOutlet UITextField *secondTextField;
 5 
 6 @end
 7 
 8 @implementation SecondViewController
 9 //返回时的触发事件
10 - (IBAction)returnClicked:(UIBarButtonItem *)sender
11 {
12     //反向传递数据
13     [self.delegate FinishedInformation:self andinfo:self.secondTextField.text];
14     
15     //关闭模态窗口
16     [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
17     //[self dismissViewControllerAnimated:YES completion:nil];
18 }
19 
20 - (void)viewDidLoad {
21     [super viewDidLoad];
22     
23     // 显示文本框内容(接受传递过来的数据)
24     self.secondTextField.text = self.information;
25 }
26 
27 @end

 

posted @ 2015-09-14 22:44  XYQ全哥  阅读(246)  评论(0编辑  收藏  举报