iOS block与封装

来源:互联网 发布:android 系统日历源码 编辑:程序博客网 时间:2024/05/29 18:02

接触block是在两天前,那时候的我还在为自己封装的View如何传递事件(比如Button的点击事件、手势….)而头疼不已。既然要封装,就应该把控件的事件都封好,我是这样想的。
于是我第一次使用的block,见证了它的强大。

iconView

这个就是我封装的一个View,上面是一个UIImageView做头像,和一个UIImageView做背景,还有一个Label。
主要功能就是点击iconView可以进行修改头像这个工具,功能很简单 没有什么特别的,之所以封装是因为很多地方都要用到这个View。

我给iconView加上点击手势 代码如下:
// 添加点击手势
[ self.iconView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeIconAndName)]];

changeIconAndName这个方法,但是跳装界面可不能封装在View里,因为别的界面的iconView点击跳转的界面也是不一样的。

所以,要告诉外面,让外面去跳装。怎么办呢?这时候block就派上大用场了。

// 通知外部 点击了手势
-(void)changeIconAndName
{
self.tapTargetClickBlock();
}

当当当当~~~~ 对,没有看错,就这么一句代码就实现了。不过前提需要定义一个block作为这个View 的成员变量。
在.h里面:

typedef void(^TapTargetClickBlock)();
@interface HeaderView : UIView
//点击手势触发之后的block
@property (nonatomic ,copy) TapTargetClickBlock tapTargetClickBlock;
@property(strong,nonatomic)UIView *myHeaderView;



@end

这样外面就可以调用这个block了。

外面需要用iconView的地方:

myHeaderView.tapTargetClickBlock = ^{    NSLog(@"点击了头像");    [self.navigationController pushViewController:[[MyEditViewController alloc]init] animated:YES];

};

ok了。跳转不同的界面这要在这里面指定就OK了。通过block不超过十行代码就封好了。
button点击事件也是同样的方法。
block真是太强大,❤️上它了。

原创粉丝点击