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点击事件的功能
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在之前的一篇文章中已经介绍过, 可以通过 runtime 机制给已有的类"添加"对象属性和非对象属性)[详情]. ...
- UIButton是基于 action - target 的事件机制处理点击事件的。通常,如果我们需要添加一个 UI...
- 前言 之前都用的继承的方式实现扩大点击事件,绑定block,最好还是扩展为UIButton的分类,特意整理一下。 ...
- ios 中在UIview中添加UIview A子控件,之后在UIview A子控件上添加一个UIbutton控件,...
- 直接上代码 .h文件#import typedef void (^btnBlock)(); .m文件 tips:...