界面之间回调传值主要有两种方式:
1.利用代理Delegate来实现回调传值
2.利用Block来实现回调传值
现在假设一个场景:由A界面跳转到B界面,A把Person的name带到B界面,现在在B界面修改了Person的name,需要将修改后的name回传到A界面
1.Delegate回调传值
a.在B.h定义一个代理
- @protocol ChangeNameDelegate
- -(void) personNameChange:(NSString *)value;
- @end
b.并在B.h中定义一个delegate变量
@property (nonatomic, strong) id<ChangeNameDelegate> delegate;
d.再到A.m中实现ChangeNameDelegate代理的personNameChange方法
e.A中创建B对象时,需要给B对象中的delegate赋值,一般吧A对象赋给delegate
f.B中修改了name后,调用_delegate的personNameChange方法
if ([_delegate respondsToSelector:@selector(personNameChange:)]) {
[_delegate personNameChange:newName];
}
2.用Block来实现上面的回调传值
a.在B.h定义一个Block
typedef void(^ChangeNameBlock)(NSString *newName);
b.在B.h中定义一个Block变量
@property (nonatomic,copy) ChangeNameBlock block;
c.在A中创建B对象时,要给A中的block赋值
d.在B中修改值后,调用block回传新值
if (_block) {
_block(newName);
}