RxSwift实现对textField内容监听改变按钮状态

在iOS开发中,经常遇到按钮的响应状态跟随输入框内容的变化而变化,以下面两个场景为例子:

第一个场景:单输入框场景
获取验证码后,跳转到一个输入验证码的界面,要求输入框中输入6位数字,输入框下方的提交按钮才可以被点击,否则为不可点击状态;

第二个场景:多输入框场景(以两个输入框为例子)
用户必须输入用户名和密码后,才可以点击下方的登陆按钮,否则登陆按钮为不可点击状态;

这两个需求是开发人员的基操,简单实现方式我就不再赘述,我们展示一下使用RxSwift来实现这种效果有多easy。

第一个场景,绑定关系代码如下:

 func setupEvent(){
        //使用Rx对输入框内容进行监听,如果监听内容发生改变,按钮状态进行改变
        let verifiInput = verifiTextField?.rx.text.orEmpty.asDriver()
            .throttle(.milliseconds(300))    //当文本框内容改变(0.3秒内值若多次改变,取最后一次)

        //输入的内容绑定按钮的响应
        verifiInput?.map({ $0.count > 5 })
            .drive((submitButton?.rx.isEnabled)!)
            .disposed(by:disposeBag)
        
        //submit button action
        submitButton?.rx.tap.subscribe(onNext: {
            print("sumit verification code!!")
        }).disposed(by: disposeBag)
  }

效果如下


单输入框.gif

第二个场景,绑定关系代码如下:

func setupEvent(){
        //listen
        Observable.combineLatest((accTextF?.rx.text.orEmpty)!, (pswTextF?.rx.text.orEmpty)!){ textValue1,textValue2 -> Bool in
            return textValue1.count > 0 && textValue2.count > 0
        }
        .map{ $0 }
        .bind(to: (loginButton?.rx.isEnabled)!)
        .disposed(by: disposeBag)
        
        
        //login event
        loginButton?.rx.tap.subscribe(onNext: {
            print("click login!!")
        }).disposed(by: disposeBag)
        
        //jump Verification Code page
        jumpVerifiButton?.rx.tap.subscribe(onNext: {[weak self] in
            self?.navigationController?.pushViewController(VerificationCodeViewController.init(), animated: true)
        }).disposed(by: disposeBag)
    }

效果如下


多输入框.gif

响应式编程真的很方便,节省大部分代码。

完整工程链接:
链接: https://pan.baidu.com/s/11a_6p7RiaxzHbdRTA5zFJQ 密码: 5drh

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

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,609评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,275评论 1 3
  • 没事就多看看书,因为腹有诗书气自华,读书万卷始通神。没事就多出去旅游,别因为没钱而找借口,因为只要你省吃俭用,来...
    向阳之心阅读 4,813评论 3 11
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 125,987评论 2 7