美文网首页
用协议代理实现两个界面传值

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

作者: _桃夭大人_ | 来源:发表于2015-06-30 08:30 被阅读513次

    界面二的.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;

    }

    相关文章

      网友评论

          本文标题:用协议代理实现两个界面传值

          本文链接:https://www.haomeiwen.com/subject/dibeqttx.html