用协议代理实现两个界面传值

界面二的.m文件

// 制定协议

import@protocol WTwoViewControllerDelegate

// 声明协议方法

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

 @end 

@interface WTwoViewController : UIViewController 

// 声明一个Block类型的属性

@property (nonatomic, unsafe_unretained) iddelegate; 

// 声明一个UITextField类型的全局变量*txtValue

@property (nonatomic, strong) IBOutlet UITextField *txtValue; 

// 声明Button的点击事件方法

- (IBAction)pressChange:(id)sender; 

@end

// 界面二的.h文件

 - (IBAction)pressChange:(id)sender 方法中把代理派发出去,顺便把窗口给销毁,

代码如下:- (IBAction)pressChange:(id)sender {   

// 代理传值

  [self.delegate changeValue:self.txtValue.text];  

  [self dismissViewControllerAnimated:YES completion:nil]; 

界面二中的设置已经完成,接下要在界面一中调用界面二的头文件,并实现界面二协议中所制定的方法。

首先在WViewController.h中实现代理,

代码如下:

#import "WTwoViewController.h" // 包含头文件

// 声明方法

@interface WViewController : UIViewController

@property (strong, nonatomic) IBOutlet UILabel *lblValue;

- (IBAction)pressCasting:(id)sender;

@end

其在WViewController.m的 

- (IBAction)pressCasting:(id)sender 方法中调用WTwoViewController,

并设置代理的回调方法,代码如下:

- (IBAction)pressCasting:(id)sender {

WTwoViewController *controller = [[WTwoViewController alloc]initWithNibName:@"WTwoViewController" bundle:nil];

controller.delegate = self;

[self presentViewController:controller animated:YES completion:nil];

}

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

// 改变UILabel的值

self.lblValue.text = value;

}

你可能感兴趣的:(用协议代理实现两个界面传值)