• UIButton+Block


    UIButton的一个Category,使用block处理UIControlEvent事件,如常用的TouchUpInside等。
    代码非原创,也是从网上看到的,用到了实际项目中,目前还没发现什么问题。

    UIButton+Block.h:

     1 #import <UIKit/UIKit.h>
     2 #import <objc/runtime.h>
     3 
     4 typedef void (^ActionBlock)();
     5 
     6 @interface UIButton (Block)
     7 
     8 /**
     9  *  UIButton添加UIControlEvents事件的block
    10  *
    11  *  @param event 事件
    12  *  @param action block代码
    13  */
    14 - (void) handleControlEvent:(UIControlEvents)event withBlock:(ActionBlock)action;
    15 
    16 @end

    UIButton+Block.m:

     1 #import "UIButton+Block.h"
     2 
     3 @implementation UIButton (Block)
     4 
     5 static char eventKey;
     6 
     7 /**
     8  *  UIButton添加UIControlEvents事件的block
     9  *
    10  *  @param controlEvent 事件
    11  *  @param action block代码
    12  */
    13 - (void) handleControlEvent:(UIControlEvents)event withBlock:(void (^)())action {
    14     objc_setAssociatedObject(self, &eventKey, action, OBJC_ASSOCIATION_COPY_NONATOMIC);
    15     [self addTarget:self action:@selector(callActionBlock:) forControlEvents:event];
    16 }
    17 
    18 - (void)callActionBlock:(id)sender {
    19     ActionBlock block = (ActionBlock)objc_getAssociatedObject(self, &eventKey);
    20     if (block) {
    21         block();
    22     }
    23 }
    24 
    25 @end

    具体使用:

    1 - (void)viewDidLoad {
    2     [super viewDidLoad];
    3     // Do any additional setup after loading the view, typically from a nib.
    4     
    5     [self.button handleControlEvent:UIControlEventTouchUpInside withBlock:^{
    6        
    7         NSLog(@"button touched!");
    8     }];
    9 }

    附上demo,这里是链接地址

    另外,毕竟是用到了objc_setAssociatedObject动态关联,虽然不知道有没有什么性能影响,但是个人感觉最好不要滥用,比如Button的点击事件里代码量较大时最好还是用原生的处理方法。
    如果UIButton是动态创建的,且事件处理逻辑较少(比如就几行代码 ),我觉得还是可以使用。我目前是用在自定义导航栏按钮上。

     
  • 相关阅读:
    numpy
    shell进阶2
    python笔记3
    shell进阶1
    记录:Paxos原理、历程及实战
    收藏
    linux fs io
    linux mount 操作
    docker好文收藏
    rbd snap(1)
  • 原文地址:https://www.cnblogs.com/manji/p/4816365.html
Copyright © 2020-2023  润新知