在iOS学习中登录注册是一个万能的可以拿出来实战的demo。接下来我们就从登录开始入手,PS:如果你对RXSwift中的概念和一些常用的函数不清楚可以参考这篇文章(可能打开比较慢请耐心等待)。开始直接上代码。先看一下我们要实现的效果。

loginGif.gif

分析实现:
1.在还没有输入的时候,显示提醒信息
2.输入账号和密码正确的时候隐藏提示信息
2.在账号和密码都输入的时候登录按钮可以点击

1.直接在storyBoard中创建简单的登录界面

简单的登录界面

关联好对应的属性,接下来引入我们今天的重点对象

import RxSwift
import RxCocoa

创建一个disposeBag来盛放我们需要管理的资源,然后把新建的监听都放进去,会在适当的时候销毁这些资源。

let disposeBag = DisposeBag()

接下来开始对事件的判断和绑定事件

        //判断账号的输入是否可用
let accountValid:Observable = accountField.rx.text.orEmpty.map{ value in
return value.characters.count >= 6
}
//判断密码的输入是否可用
let passwordValid:Observable = passwordField.rx.text.orEmpty.map{ value in
return value.characters.count >= 6
}

上面orEmpty是判断当前字符串是否为空的,在RXSwift中已经处理了为nil的情况,map函数是在事件流转换的时候,重新生成另一个事件流,在这里是把一个文字事件流映射成一个bool事件流,accountValidpasswordValid都是Observable<Bool>类型

对于账号和密码输入正确与否的一个显示

      //账号密码输入的正确与否 绑定到infoLabel的hidden属性上
//绑定显示
accountValid.bind(to: accountInfoLabel.rx.isHidden).addDisposableTo(disposeBag)
passwordValid.bind(to: passwordInfoLabel.rx.isHidden).addDisposableTo(disposeBag)

接着就是对于登录按钮的是否可点击的绑定

//登录按钮的可用与否
let loginObserver = Observable.combineLatest(accountValid,passwordValid){(account,password) in
account && password
}
//绑定按钮
loginObserver.bind(to: loginBtn.rx.isEnabled).addDisposableTo(disposeBag)
loginObserver.subscribe(onNext: { [unowned self] valid in
self.loginBtn.alpha = valid ? 1 : 0.5
}).disposed(by: disposeBag)

上面的将账号和密码输入的值与按钮的enable属性相关联,当accountValidtrue,并且passwordValid也为true时,按钮才可点击,同时也修改了按钮的透明度变化

接下来就是按钮点击事件的判断以及对应的方法的执行

loginBtn.rx.tap
.asObservable()
.withLatestFrom(loginObserver)
.do(onNext: {
[unowned self]_ in
self.loginBtn.isEnabled = false
self.view.endEditing(true)
})
.subscribeOn(MainScheduler.instance)//主线程
.subscribe(onNext: {[unowned self]isLogin in
self.showAlert(message: "开始点击")
self.loginBtn.isEnabled = true
})
.addDisposableTo(disposeBag)//开始释放

按钮的点击事件中绑定的是loginObserver最新的一个流操作,do(onNext)函数是在执行之前对按钮的一个限定,比如网络请求延迟,按钮点击多次,我在按钮第一次点击的时候,就禁用按钮,等到网络请求成功或者失败返回信息的时候再修改按钮可点击的状态,.subscribeOn函数是指定事件流在那个线程中执行,这里指定的是主线程。subscribe(onNext…………这是点击按钮之后执行方法的闭包。 简写也可以写成这个样子哦,这个只是简单处理按钮的点击事件

loginBtn.rx.tap
.subscribe(onNext: {[unowned self]isLogin in
self.showAlert(message: "开始点击")
})
.addDisposableTo(disposeBag)//开始释放

最后是alertView的一个弹出视图

fileprivate func showAlert(message:String) {
let action = UIAlertAction.init(title: "确定", style: .default, handler: nil)
let alertView = UIAlertController.init(title: nil, message: message, preferredStyle: .alert)
alertView.addAction(action)
present(alertView, animated: true, completion: nil)
}

以上只是一个简单的值绑定进行的判断,接下来我们要使用Observable和Driver去实现这个登录注册功能,下面实现的比较绕,请坐好车

编辑中…………

RXSwift--登录注册那点事的更多相关文章

  1. Java Spring+Mysql+Mybatis 实现用户登录注册功能

    前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...

  2. Owin+ASP.NET Identity浅析系列(一)用户登录注册

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 使用VS2015创建MVC项 ...

  3. web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)

    这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...

  4. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  5. JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册

    写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...

  6. HTML登录注册界面怎么制作?

    在没有学习CSS样式的前提下,是如何做一个简单的注册界面的. 一.表单标签(form) 首先我们先写一个<form></form>的标签,form标签属于表单标签,通常我们的登 ...

  7. php+ajax 登录注册页面

    主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面  点击注册切换到注册界面,点击登录切换到登录界面 <!DOCTYPE h ...

  8. 7. Swift 基于Xmpp和openfire实现一个简单的登录注册

    1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语 ...

  9. Nodejs学习总结 -Express 登录注册示例(二)

    项目创建后,我们来做个登录注册实例,详细操作步骤如下. 1.新建项目demo ,具体操作步骤参考上一章内容 https://www.cnblogs.com/Anlycp/ 2.添加mysql和sess ...

随机推荐

  1. 在WIN7下安装运行mongodb

    1).下载MongoDB http://downloads.mongodb.org/win32/mongodb-win32-i386-2.4.5.zip 下载Windows 32-bit版本并解压缩, ...

  2. FileBeats安装

    FileBeats安装 FileBeats官方下载链接: https://www.elastic.co/downloads/beats/filebeat 也可以直接使用以下命令下载(文章下载目录一概为 ...

  3. 微信网页授权,错误40163,ios正确,安卓错误?

    2017-07-29:结贴昨天研究了半天,也没解决,看到出错的http头里面有PHPSESSID,回头去修改了一下程序里的session部分的代码(这部分代码在微信网页授权之后),,也不知道是腾讯那边 ...

  4. 带提示范围的猜数小游戏--python

    import random random_number = random.randint(1, 99) print(random_number) start_data = 1 end_data = 9 ...

  5. gem install ruby-odbc失败

    解决: brew install unixodbc gem install ruby-odbc -v '0.99998'

  6. 005---Linux文件与目录管理

    文件与目录管理 路径 绝对路径:从根目录开始的路径为绝对路径 ls /home cd /etc 相对路径:从当前路径开始描述为相对路径 cd ../../:.表示当前目录:..表示上级目录 ls ab ...

  7. 关于 VirtualBox6 下的 Win10 虚拟机 与 宿主机 共享文件

    1. 概述 需要在 宿主机 和 虚拟机 之间交换文件 复制粘贴 貌似不太好使 2. 问题 设置了共享文件夹之后, 找不到目录 3. 环境 宿主机 OS Win10 开启了 网络发现 略 虚拟机 OS ...

  8. Java设计模式(5)——创建型模式之建造者模式(Builder)

    一.概述 概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.(与工厂类不同的是它用于创建复合对象) UML图   主要角色 抽象建造者(Builder)——规范建造方法与结果 ...

  9. 北京Uber优步司机奖励政策(1月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. Java:break和continue关键字的作用

    二者的作用和区别 1. break:直接跳出当前循环体(while.for.do while)或程序块(switch).其中switch case执行时,一定会先进行匹配,匹配成功返回当前case的值 ...