RxSwift UIButton的倒计时
2020-03-05 本文已影响0人
__Mr_Xie__
前言
废话不多说了,可以直接拿过来用,封装你们自己看着办吧。
Code
import UIKit
import RxSwift
import RxCocoa
let countDownSeconds: Int = 60
class ViewController: UIViewController {
@IBOutlet weak var secondBtn: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let timer = Observable<Int>.timer(0, period: 1, scheduler: MainScheduler.instance)
.map{countDownSeconds - $0}
.filter{ $0 >= 0 }
.asDriver(onErrorJustReturn: 0)
let second = secondBtn.rx.tap
.flatMapLatest { _ -> Driver<Int> in
return timer
}
let sendCodeButtonText = second.map { [weak self] (e) -> String in
self?.secondBtn.isEnabled = (e == 0 ? true : false)
return (e == 0 ? "发送验证码":"\(e)s")
}
sendCodeButtonText.bind(to: secondBtn.rx.title(for: .normal)).disposed(by: disposeBag)
}
}
注意⚠️
- 倒计时的
UIButton
务必是custom
类型,即:
UIButton(type: .custom)
否则会出现倒计时闪烁的问题。
Author
如果你有什么建议,可以关注我的公众号:iOS开发者进阶
,直接留言,留言必回。