iOS 页面传值的几种方式之代理传值
场景: 假设我们有两个控制,控制器A和控制器B,当我们A ——>B,无论我们使用modal方式还是push 还是segue,我们都可以直接给B控制一个成员属性。只需要重写这个属性的set方法,就能够实现A的值传向B中去,如果需要根据这个值来改变B控制器的样式,我们在setter方法中重写即可。
那么问题来了,学挖掘机哪家强,中国山东找LX!!
言归正传,如果当我们B控制器回到A控制器,无论是Push还是Modal方式,这个值又该怎么传呢?
假想场景: A中有一个 Label ,B中有一个TextField ,当B控制器pop或者dismiss的时候,回到A,将B中TextField的值赋值给A控制器中的Label
1.最常见的可能就是代理传值方式
1.1给B控制器设置代理
@optional
-(void)passString:(NSString*)str;//B控制器的传值代理
B控制器消失 pop 或者dismiss操作之前
添加代码:
if([self.delegate reponseToSelector:@selector(passString:)]){//如果代理实现了这个方法
//通知代理实现这个方法
[self.delegate passString:self.textFeild.text];
}
ZPViewControllerA.h
#import <UIKit/UIKit.h>
@interface ZPViewControllerA : UIViewController
@end
ZPViewControllerA.m
//当需要Push操作或者present操作时
ZPViewControllerB *VcB=[[ZPViewControllerB alloc] init];
VcB.delegate=self;
//实现B控制器的代理方法
-(void)passString:(NSString*)str{
self.textLabel.text=str;//将B控制器丢过来的值赋值给A中Label
}