美文网首页
UIButton 添加支持Block点击事件的功能

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

作者: 小猪蛋蛋 | 来源:发表于2024-01-14 14:35 被阅读0次
    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)
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:UIButton 添加支持Block点击事件的功能

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