美文网首页iOS技能
如何给View添加点击事件

如何给View添加点击事件

作者: 李小争 | 来源:发表于2016-07-11 21:15 被阅读1229次

    项目中有很多地方需要添加点击事件,重复代码很多,所以做了一个UIView的分类,专门做点击事件使用.
    项目地址:UIView-Tap

    代码很简单,主要有一点就是注意分类不能直接添加属性,需要用到运行时相关内容.

    代码如下:

    \\UIView+Tap.h文件
    @interface UIView (Tap)
    - (void)addTapBlock:(void(^)(id obj))tapAction;
    @end
    
    \\UIView+Tap.m文件
    #import <objc/runtime.h>
    
    static const void* tagValue = &tagValue;
    
    @interface UIView ()
    @property (nonatomic, copy) void(^tapAction)(id);
    @end
    
    @implementation UIView (Tap)
    - (void)tap{
        if (self.tapAction) {
            self.tapAction(self);
        }
    }
    - (void)addTapBlock:(void(^)(id obj))tapAction{
        self.tapAction = tapAction;
        if (![self gestureRecognizers]) {
            self.userInteractionEnabled = YES;
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)];
            [self addGestureRecognizer:tap];
        }
    }
    
    -(void)setTapAction:(void (^)(id))tapAction {
        objc_setAssociatedObject(self, tagValue, tapAction, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    -(void (^)(id))tapAction {
        return objc_getAssociatedObject(self, tagValue);
    }
    @end
    

    正如大家所见,如果要接收点击事件,必须userInteractionEnabled设置为YES,所以不管怎么只要确认要给视图添加点击事件,都会被设置为userInteractionEnabled = YES

    简单实用:

    UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    redView.backgroundColor = [UIColor redColor];
    [redView addTapBlock:^(UIView* obj) {
        NSLog(@"redView%@",obj.backgroundColor);
    }];
    [self.view addSubview:redView];
    
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 250, 100, 100)];
    imageView.image = [UIImage imageNamed:@"icon"];
    [imageView addTapBlock:^(UIImageView* obj) {
        NSLog(@"imageView:\n%@",obj.image);
    }];
    [self.view addSubview:imageView];
    
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(150, 400, 100, 100)];
    label.text = @"这是label,点击这里...";
    [label addTapBlock:^(UILabel* obj) {
        NSLog(@"label:\n%@",obj.text);
    }];
    [self.view addSubview:label];
    
    

    相关文章

      网友评论

        本文标题:如何给View添加点击事件

        本文链接:https://www.haomeiwen.com/subject/ntujjttx.html