IOS页面(控制器之间)传值之代理

控制器B要传值给控制器A
1.需要一个协议,协议里有一个方法,这个方法的参数即是要传递的参数
@protocol chuanzhi <NSObject>

@required
-(void)chuanzhi:(NSString*)str1 WithString2:(NSString*)string2;

@end
 
2.需要控制器B中有一个实现这个协议的代理属性
@property(assign,nonatomic)id<chuanzhi>delegate;
 
3.用这个代理属性调用代理里的方法,因为这个方法需要参数,所以就要给这个方法参数,这个时候正好把要传递给控制器A的参数作为协议方法的实参。
//在点击我们销毁模态试图的方法里增加一个代理调用协议的方法
- (IBAction)disAction:(UIButton *)sender {
   
   
    [self dismissViewControllerAnimated:YES completion:^{
       
        //在点击我们销毁模态试图的方法里增加一个代理调用协议的方法
        [self.delegate chuanzhi:self.textFiled1.text WithString2:self.textFiled2.text];
       
    }];
4.第3步只是让一个并没有实际代理的代理属性调用了协议方法,具体方法的内容需要控制器A来实现(即A实现了这个协议并成为代理)。
  @interface oneViewController : UIViewController<chuanzhi>   控制器A
 
//实现代理的方法
twoViewController* twoVC = [[twoViewController alloc]init];
    //成为twoVC的代理  twoVC即控制器B
    twoVC.delegate = self;
-(void)chuanzhi:(NSString*)str1 WithString2:(NSString*)string2{
 
    self.textFiled1.text = str1; 
    self.textFiled2.text = string2;
 
//实现页面传值
}
}
原文地址:https://www.cnblogs.com/zh-li/p/5153631.html