属性传值 和 代理传值

两个controller页面相互传值

1.  Rootcontroller >> Textcontroller传值      用属性传值

2.  Textcontroller >> Rootcontroller传值      用代理传值

                               1. 属性传值

 在Textcontroller 中设置两个用来传值的属性

@property(nonatomic,retain)NSString *labelstring;

@property(nonatomic,retain)NSString *textstring;

相当于去Rootcontroller里面那东西

Rootcontroller的点击事件里 赋值

-(void)buttonAction:(UIButton *)sender

{

      FirstViewController *fir=[[FirstViewController alloc]init]; 

    [self.navigationController pushViewController:fir animated:YES];

        //属性传值

    fir.labelstring=self.root.label.text;

    fir.textstring=self.root.text.text;

   

//设置代理(代理传值时用)

    fir.delegate=self;

}

然后 在Textcontroller的viewdidload里面给自己赋值

    self.first.text.text=self.textstring;

    self.first.label.text=self.labelstring;

                   2.代理传值

1.建一个PassValueDelegate的代理类

写一个方法,参数就是用来传值的,

-(void)PassValueWithLabelString:(NSString *)labelstring

                     textstring:(NSString *)textstring;

2. 在Textcontroller里面把代理声明成属性

//声明代理

@property(nonatomic,assign)id<PassValueDelegate>delegate;

在的点击事件里 Textcontroller 调用方法

-(void)buttonAction:(UIButton *)sender

{

    [self.navigationController popViewControllerAnimated:YES];

     //调用方法  把值传给代理

    [self.delegate PassValueWithLabelString:self.first.label.text textstring:self.first.text.text];

}

3. 在上面属性传值的点击方法里 把root设置为text的代理,然后在root里实现代理方法的时候进行传值

-(void)PassValueWithLabelString:(NSString *)labelstring

                     textstring:(NSString *)textstring

{

    //代理的值传给root的属性

    self.root.label.text=labelstring;

    self.root.text.text=textstring;

}

原文地址:https://www.cnblogs.com/luningning0901/p/4152808.html