• UIButton之Block回调


    本文主要介绍了两种改写UIButton的点击事件方法——继承UIButton跟给UIButton添加一个分类。附代码

    方法一:继承UIButton

    UIButtonBlock.h文件 如下

    #import <UIKit/UIKit.h>

     

    typedef void (^ClickActionBlock) (id obj);

     

    @interface UIButtonBlock : UIButton

     

    @property (nonatomic,strong)ClickActionBlock caBlock;

     

     

    - (void)initWithBlock:(ClickActionBlock)clickBlock for:(UIControlEvents)event;

     

     

    @end

     

    UIButtonBlock.m文件如下:

    #import "UIButtonBlock.h"

     

    @implementation UIButtonBlock

     

     

    - (void)initWithBlock:(ClickActionBlock)clickActionBlock for:(UIControlEvents)event{

        

        [self addTarget:self action:@selector(goAction:) forControlEvents:event];

        self.caBlock = clickActionBlock;

        

    }

     

     

    - (void)goAction:(UIButton *)btn{

        

        self.caBlock(btn);

        

    }

    附使用方法。。。。。我这里是用storyboard拖出来的按钮。首先要在storyboard里的Button关联这个UIButtonBlock这个类

    然后就是使用:

    ……

     

        [self.clickButton initWithBlock:^(id obj) {

            NSLog(@"继承之UIButton============%@",obj);

        } for:UIControlEventTouchUpInside];

    有同学觉得多此一举,这里不作解释。

    方法二:给UIButton添加一个分类

    UIButton+Block.h文件如下

     

    #import <UIKit/UIKit.h>

     

    typedef void (^ClickActionBlock) (id obj);

     

     

    @interface UIButton (Block)

     

     

     

    - (void)initWithBlock:(ClickActionBlock)clickBlock for:(UIControlEvents)event;

     

     

    @end

    UIButton+Block.m文件如下

    #import "UIButton+Block.h"

    #import <objc/runtime.h>

     

    static id key;

     

    @implementation UIButton (Block)

     

     

     

    - (void)initWithBlock:(ClickActionBlock)clickBlock for:(UIControlEvents)event{

        

        

        objc_setAssociatedObject(self, &key, clickBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

     

        [self addTarget:self action:@selector(goAction:) forControlEvents:event];

        

    }

     

    - (void)goAction:(UIButton *)sender{

        

        ClickActionBlock block = (ClickActionBlock)objc_getAssociatedObject(self, &key);

        if (block) {

            block(sender);

        }

        

    }

    使用方法:

    ……

      [self.blockButton initWithBlock:^(id obj) {

            NSLog(@"Runtime block============%@",obj);

        } for:UIControlEventTouchUpInside ];

        

    方法一:使用注意如果手写的UIButton需要在UIButtonBlock中再写一个初始化方法。如果是从xib拖出来的是需要关联的。

    两种方法都实现了通过块来实现UIButton的addtarget方法中的@select方法的回调。代码比较粗糙大家将就着看着。

     

     

     

     

  • 相关阅读:
    DataGridView 密码列(显示为*号)的设置
    有關界面化學的一些有趣現象
    电商网站需要ICP证吗
    JS 未结束的字符串常量
    Iframe自适应高度
    JS正则表达式
    界面活性劑的作用
    js转义字符
    解决dbo登录名为空的问题
    肌肤弹性胶原蛋白
  • 原文地址:https://www.cnblogs.com/XHShare/p/4824591.html
Copyright © 2020-2023  润新知