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)
}
}
}
网友评论