UIButton 添加支持Block点击事件的功能

extension UIButton {
    // 定义关联的Key
    private struct AssociatedKeys {
        static var actionKey = "UIButton+Extension+ActionKey"
    }
    func addActionWithBlock(_ closure: @escaping (_ sender: UIButton) -> Void,
                            for controlEvents: UIControl.Event = .touchUpInside) {
        //把闭包作为一个值 先保存起来
        objc_setAssociatedObject(self, &AssociatedKeys.actionKey, closure, objc_AssociationPolicy.OBJC_ASSOCIATION_COPY)
        //给按钮添加传统的点击事件,调用写好的方法
        self.addTarget(self, action: #selector(my_ActionForTapGesture), for: controlEvents)
    }
    @objc private func my_ActionForTapGesture() {
        //获取闭包值
        let obj = objc_getAssociatedObject(self, &AssociatedKeys.actionKey)
        if let action = obj as? (_ sender:UIButton)->() {
            //调用闭包
            action(self)
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容