iOS 代码块传值小结
在培训的时候,老师有说过工作的时候代码块传值如果用得溜,对效率挺有帮助的,于是在仔细思索与应用了一天后,总结一下代码块的传值方法
普通代码块传值,下层(view类)数据变化,上层(viewController类)做相应操作
view类定义一个代码块属性, 在VC类上说创建view类时将代码块赋值给代码块属性做相应操作。
view.h类
typedef void (^SaveConsigneeBlock) (void);
typedef void (^MoveViewBlock) (CGFloat,int,int,CGFloat);
typedef void (^RemoveBlock)(AddAddressView *);
@interface AddAddressView : UIView<UITextFieldDelegate>
@property (weak, nonatomic) UITextField *textFP;
@property (strong, nonatomic) RemoveBlock removeBlock;
@property (strong, nonatomic) SaveConsigneeBlock saveBlock;
@property (strong, nonatomic) MoveViewBlock moveBlock;
view.m类调用:
-(void)awakeFromNib{
saveBlock();
}
VC.m类做代码块的操作
View * viewTest = [[NSBundle mainBundle]loadNibNamed:@"AddAddressView" owner:self options:nil][0];
viewTest.saveBlock = ^(){
//这里做VC相应的操作
};
以上是普通代码块传值的问题,同样将代码块作为方法参数,在VC调用view的方法时也可以做相应的操作
平时如果出现代码块循环引用的情况下加入
__block AddAddressView *vie = self
解决