美文网首页
iOS开发 - 为View添加Block回调(包含单击手势)

iOS开发 - 为View添加Block回调(包含单击手势)

作者: 阿唯不知道 | 来源:发表于2018-04-12 00:20 被阅读0次
    创建一个UIView的类别

    #import "UIView+YSAddClickBlock.h 文件"

    #import <UIKit/UIKit.h>
    
    @interface UIView (YSAddClickBlock)
    - (void)addClickEventBlock:(void (^)(id obj))aBlock;
    @end
    

    #import "UIView+YSAddClickBlock.m 文件"

    #import "UIView+YSAddClickBlock.h"
    
    static const void *YSUIViewBlockKey = &YSUIViewBlockKey;
    @interface UIView ()
    
    @property void(^clickBlock)(id);
    
    @end
    
    
    @implementation UIView (YSAddClickBlock)
    
    - (void)setClickBlock:(void (^)(id))clickBlock {
        objc_setAssociatedObject(self, YSUIViewBlockKey, clickBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    
    - (void (^)(id))clickBlock{
        return objc_getAssociatedObject(self, YSUIViewBlockKey);
    }
    
    - (void)addClickEventBlock:(void (^)(id obj))aBlock {
        self.clickBlock = aBlock;
        if (![self gestureRecognizers]) {
            self.userInteractionEnabled = YES;
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(blockAction)];
            [self addGestureRecognizer:tap];
        }
    }
    
    - (void)blockAction {
        if (self.clickBlock) {
            self.clickBlock(self);
        }
    }
    
    @end
    

    调用方式(引用#import "UIView+YSAddClickBlock.h后)

        UIView *view = [[UIView alloc] init];
        view.backgroundColor = kRandomColor;
        [view addClickEventBlock:^(id obj) {
            [self showMessageHud:@"我是UIView的手势Block回调"];
            ((UIView *) obj).backgroundColor = kRandomColor;
        }];
        [self.view addSubview:view];
        [view mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_equalTo(label.mas_bottom).offset(20);
            make.centerX.equalTo(self.view);
            make.size.equalTo(label);
        }];
    

    为新手补充一下,这个类别不只UIView才能用,但凡继承UIView的控件都适用哈,例如UIButtonUIImageViewUILabel等等

    相关文章

      网友评论

          本文标题:iOS开发 - 为View添加Block回调(包含单击手势)

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