<b>一行代碼倒計時</b>
實(shí)例:
[_btn ss_countDown:3 title:@"s再發(fā)送"];
比較簡單惰帽,demo地址: https://github.com/scrumsnail/SSCountDown
<b>防止按鈕重復(fù)點(diǎn)擊原理</b>
點(diǎn)擊按鈕喻旷,按鈕底層實(shí)現(xiàn)代碼
(_ action: Selector, to target: AnyObject?, for event: UIEvent?)
利用潤runtime的method_exchangeImplementations方法改變自帶底層實(shí)現(xiàn)的方法
override open class func initialize() {
let a :Method = class_getInstanceMethod(self, #selector(UIButton.sendAction(_:to:for:)))
let b :Method = class_getInstanceMethod(self, #selector(UIButton.ss_sendAction(_:to:for:)))
method_exchangeImplementations(a, b)
}
func ss_sendAction(_ action: Selector, to target: AnyObject?, for event: UIEvent?) {
if self.ss_ignore_event {
return
}
if self.ss_accepet_time > 0 {
self.ss_ignore_event = true
self.perform(#selector(setter: ss_ignore_event), with: false, afterDelay: TimeInterval(self.ss_accepet_time))
}
self.ss_sendAction(action, to: target, for: event)
}
<a >demo地址</a>