直接上代码
//手机号判断
let phonenumValid = phoneNum.rx.text.orEmpty.map {
$0.count == phoneNumLength
}.share(replay: 1)
//验证码判断
let codeValid = codeNum.rx.text.orEmpty.map {
$0.count == codeNumLength
}.share(replay: 1)
//此处判断协议是否勾选 条件 感谢stack overflow
let agreeValid = agreeBtn.rx.tap.scan(false) {lastValue, _ in
return !lastValue
}.share(replay: 1)
// 括号相当于三个条件,只有三个条件同时成立 才可以
let buttonValid = Observable.combineLatest(phonenumValid, codeValid, agreeValid) {
$0 && $1 && $2
}.share(replay:1)
//根据手机号判断 验证码是否可以输入 绑定
phonenumValid.bind(to: codeNum.rx.isEnabled).disposed(by: disposBag)
//根据手机号判断 获取验证码按钮是否可以输入
phonenumValid.bind(to: codeBtn.rx.isEnabled).disposed(by: disposBag)
//此处 根据 验证码按钮是否可以点击来 更改背景色
phonenumValid.bind {
[unowned self](isEnabled) in
if isEnabled {
self.codeBtn.backgroundColor = UIColor.pink
} else {
self.codeBtn.backgroundColor = UIColor(r: 212, g: 212, b: 212)
}
}.disposed(by: disposBag)
//将三个条件 绑定到 登录按钮上
buttonValid.bind(to: loginBtn.rx.isEnabled).disposed(by: disposBag)
//此处 根据 登录按钮是否可以点击来 更改背景色
buttonValid.bind {[unowned self](isEnabled) in
if isEnabled {
self.loginBtn.backgroundColor = UIColor.pink
} else {
self.loginBtn.backgroundColor = UIColor(r: 212, g: 212, b: 212)
}
}.disposed(by: disposBag)
//登录按钮点击
loginBtn.rx.tap.subscribe {[unowned self] (_) in
let alert = UIAlertController(title: "提示", message: "登录成功!", preferredStyle: .alert)
let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}.disposed(by: disposBag)