RXSwift 登录实例-->根据条件改变按钮颜色(包括勾选协议条件)

直接上代码

  //手机号判断
 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)

你可能感兴趣的:(RXSwift 登录实例-->根据条件改变按钮颜色(包括勾选协议条件))