RXSwift--登录注册那点事
在iOS学习中登录注册是一个万能的可以拿出来实战的demo。接下来我们就从登录开始入手,PS:如果你对RXSwift中的概念和一些常用的函数不清楚可以参考这篇文章(可能打开比较慢请耐心等待)。开始直接上代码。先看一下我们要实现的效果。
分析实现:
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事件流,accountValid和passwordValid都是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属性相关联,当accountValid为true,并且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--登录注册那点事的更多相关文章
- Java Spring+Mysql+Mybatis 实现用户登录注册功能
前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...
- Owin+ASP.NET Identity浅析系列(一)用户登录注册
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 使用VS2015创建MVC项 ...
- web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)
这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...
- JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册
写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...
- HTML登录注册界面怎么制作?
在没有学习CSS样式的前提下,是如何做一个简单的注册界面的. 一.表单标签(form) 首先我们先写一个<form></form>的标签,form标签属于表单标签,通常我们的登 ...
- php+ajax 登录注册页面
主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面 点击注册切换到注册界面,点击登录切换到登录界面 <!DOCTYPE h ...
- 7. Swift 基于Xmpp和openfire实现一个简单的登录注册
1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语 ...
- Nodejs学习总结 -Express 登录注册示例(二)
项目创建后,我们来做个登录注册实例,详细操作步骤如下. 1.新建项目demo ,具体操作步骤参考上一章内容 https://www.cnblogs.com/Anlycp/ 2.添加mysql和sess ...
随机推荐
- QQ好友的价值玩法 及如何搞到几万好友?
我们知道,现在的自媒体平台太多了.微信公众号,企鹅媒体平台,今日头条.搜狐.UC.一点等等等. 但是现在的话最主要的就是盈利,我们很多朋友玩自媒体这个在很多平台都有自己的账号和大量的粉丝.但是,最后大 ...
- 对QP中RTC的理解
1.概念 RTC(Run To Completion)是运行到完成为止的意思.在状态机中,从源状态到目标状态的转换动作要运行到完成. 从字面上来看,这个过程像是不可中断的,但实际并不是,这个过程可以被 ...
- [原创]用python检测LVS real server状态实现HTTP高可用
import httplib import os import time def check_http(i): try: conn=httplib.HTTPConnection(i, 80, time ...
- SQL 备忘录
都兼容 MySQL 查看表结构:DESC ${table_name} 查看建表语句:SHOW CREATE TABLE ${table_name} 表增加列:ALTER TABLE ${table_ ...
- vue相关ajax库的使用
相关库: vue-resource: vue插件, 多用于vue1.x axios: 第三方库, 多用于vue2.x vue-resource使用 // 引入模块 import VueResource ...
- HTML基础part2
表单标签form 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.sel ...
- JavaScript---复选框反选全选
Script <script type="text/javascript"> /*直接使用document.getElementsByName("c1&quo ...
- 吴裕雄 python 机器学习——混合高斯聚类GMM模型
import numpy as np import matplotlib.pyplot as plt from sklearn import mixture from sklearn.metrics ...
- KubeCon深度洞察 | KubeEdge开源首秀
以下内容根据华为云DJ在KubeCon Shanghai Demo Session演讲实录整理而成. KubeEdge Demo Show 11月15日上午Huawei宣布了KubeEdge项目开源, ...
- Unity编辑器 - 编辑器控制特效播放
编辑器控制特效播放 Unity的动画编辑器不能预览粒子系统的播放,为了方便预览特效,设想制作一个预览特效的工具,通常一个特效有三种组件: - Animation - Animator - Partic ...