按钮防止暴力点击是个很平常的需求,测试时候产品经理、测试妹子经常会看哪个按钮不爽,然后使劲戳它,心疼按钮2秒钟。。。
一言不合上代码
首先在按钮的extension里面加入一个结构体和两个计算型属性,结构体记录string常量
1 | private struct AssociatedKeys { |
acceptEventInterval
用来记录点击间隔
1 | /// 按钮点击间隔时间 |
waitingTime
用来记录上次有效点击的时间戳
1 |
|
交换点击方法
1 | /// 交换方法 |
点击方法的替换方法,判断当前时间戳减去上次有效点击的时间戳的间隔时间是否小于设置的间隔时长,小于则直接返回,如果大于等于则判定为有效点击,记录时间戳并执行点击方法
1 | /// 点击判断方法 |
我们可以看到acceptEventInterval
属性的set方法第一行有一个断言,当设置为小于或等于0时候就会触发断言(间隔时长无法设置为0或更小),当newValue通过断言,交换响应方法,objc_getAssociatedObject
使用给定的结构体的acceptEventInterval
键动态增加关联值,get方法就是取出动态增加的关联值