一行代码倒计时和防止按钮重复点击原理

<b>一行代码倒计时</b>
实例:

[_btn ss_countDown:3 title:@"s再发送"];

比较简单,demo地址: https://github.com/scrumsnail/SSCountDown

<b>防止按钮重复点击原理</b>

点击按钮,按钮底层实现代码

(_ action: Selector, to target: AnyObject?, for event: UIEvent?)

利用润runtime的method_exchangeImplementations方法改变自带底层实现的方法

     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 href="https://github.com/scrumsnail/ButtonHandle">demo地址</a>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容