使用RxSwift 实现登录页面的条件绑定
我们在使用MVC建构进行开发时,对登录页面用户名密码等进行的处理一般是这样的,点击登录按钮判断用户框以及密码框输入的合法性,用一堆if真是屎一般!或者用textfield的代理来进行响应其实也是屎一般!
有了RxSwift,我们的响应式又多了一种可能!
let usernameValid = user_nameTextField.rx.text
.map{($?.characters.count)! >= minUsernameLength && ($?.characters.count)! <= maxUsernameLength } //map函数 对text进行处理
.shareReplay() let passwordValid = secertTextFiled.rx.text
.map{($?.characters.count)! >= minPasswordLength && ($?.characters.count)! < maxPasswordLength } //map函数 对text进行处理
.shareReplay() //
let everythingValid = Observable.combineLatest(usernameValid, passwordValid) { (usernameValid, passwordValid) -> Bool in
usernameValid && passwordValid
} usernameValid
.bindTo(usernameLabel.rx.isHidden) //username通过验证,usernameLB警告消失
.addDisposableTo(disposBag)
passwordValid
.bindTo(secertLable.rx.isHidden)
.addDisposableTo(disposBag) usernameValid
.bind(to: secertTextFiled.rx.isEnabled) //username通过验证,passwordTF才可以输入
.addDisposableTo(disposBag) everythingValid
.bind(to: loginbtn.rx.isEnabled) // 用户名密码都通过验证,才可以点击按钮
.addDisposableTo(disposBag) everythingValid.bind { [weak self](isenabled) in
if isenabled{
self?.loginbtn.backgroundColor = .red
}else{
self?.loginbtn.backgroundColor = .gray
}
}.addDisposableTo(disposBag) loginbtn.rx.tap //绑定button点击事件
.bind { [weak self] in
self?.showAlert()
}
.addDisposableTo(disposBag)
以上代码很好理解,我们用到了shareReply来共享监听,避免会创建多个序列去执行输入框的监听
使用RxSwift 实现登录页面的条件绑定的更多相关文章
- 今天网站后台登录页面需要生成一个二维码,然后在手机app上扫描这个二维码,实现网站登录的效果及其解决方案如下
要实现二维码登录,需要解决2个技术,1.需要js websocket 与后台php实现长连接技术 2.实现二维码生成技术 要实现这个功能第二个算是比较简单,只需要下载一个php的二维码生成器即可,但要 ...
- 单点登录CAS使用记(四):为登录页面加上验证码
CAS默认的登录页面样式如下,只有用户名与密码两项验证项目. 现在需要为首页登录加上验证码功能. 第一步:首页对默认登录页面的样式进行了调整,使其看上去还算美观. 在页面上加上了验证码项目. 第二步: ...
- c#-MVC基础操作-数据的展示及增删改、登录页面及状态保持
一.数据展示 1.View代码: <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynam ...
- php源码建博客1--搭建站点-实现登录页面
主要: 站点搭建 实现登录页面 分析及改进 站点搭建 1) 在apache安装目录下: [conf\extra\httpd-vhosts.conf]加入站点配置 <VirtualHost *: ...
- Nuxt.js打造旅游网站第3篇_登录页面的编写
主要知识点: 1.使用vuex/store管理数据 2.登录注册逻辑 3.Nuxt的本地存储 1.登录页面 1.1登录页面布局 替换pages/user/login.vue的代码如下 <temp ...
- 注册登录页面修订-Python使用redis-手机验证接口-发送短信验证
登录页面修订 views.Login.vue <template> <div class="login box"> <img src="@/ ...
- 完整微信小程序授权登录页面教程
完整微信小程序授权登录页面教程 1.前言 微信官方对getUserInfo接口做了修改,授权窗口无法直接弹出,而取而代之是需要创建一个button,将其open-type属性绑定getUseInfo方 ...
- 制作登录页面,点击键盘的 Enter 键或者单击“登录”按钮,验证用户输入的邮箱和密码是否正确
查看本章节 查看作业目录 需求说明: 制作登录页面 点击键盘的 Enter 键或者单击"登录"按钮,验证用户输入的邮箱和密码是否正确 实现思路: 准备登录的静态页面 在页面中嵌入脚 ...
- 解决使用IE8打开ADFS 3.0登录页面
系统上线前一天,发现客户竟然有XP系统和2003系统,这些系统都不能访问外网.测试时,客户端是IE8,打开我们系统ADFS的登录页面,一直在Loading,无法打开,也不报错.后来通过fiddler跟 ...
随机推荐
- python--calc计算器的小程序
x写一个计算器的小程序,正在筹备中......钱不够,演员未定,剧本暂无,请稍等
- 拒绝采样 Rejection Sampling
2018-12-09 16:40:30 一.使用Rand7()来生成Rand10() 问题描述: 问题求解: 这个问题字节跳动算法岗面试有问到类似的,有rand6,求rand8,我想了好久,最后给了一 ...
- C# 递归缩小图片
需求:图片太大,上传到服务器会非常占用服务器空间,而系统又不要求高清图片,于是就通过递归的方式让图片每次减少10%的大小,当图片大小小于100k的时候就保存在本地,核心代码如下: class Prog ...
- <山月记>:中岛敦 -选段
因为害怕自己并非明珠而不敢刻苦琢磨,又因为有几分相信自己是明珠,而不能与瓦砾碌碌为伍,遂逐渐远离世间,疏避人群,结果在内心不断地用愤懑和羞怒饲育着自己懦弱的自尊心.世上每个人都是驯兽师,而那匹猛兽,就 ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形网格惰性加载节点
jQuery EasyUI 树形菜单 - 树形网格惰性加载节点 有时我们已经得到充分的分层树形网格(TreeGrid)的数据. 我们还想让树形网格(TreeGrid)按层次惰性加载节点. 首先,只加载 ...
- English trip EM2-LP-6B Teacher:Gabriele
Gabriele Gabi n. 加布里尔,加布里埃尔,加布里埃,加布里埃莱(人名) 课上内容(Lesson) 词汇(Key Word ) is married? 结 ...
- MP4文件格式
MP4文件格式详解(ISO-14496-12/14) Author:Pirate Leo Email:codeevoship@gmail.com 一.基本概念 1. 文件,由许多Box和FullBox ...
- Android -------- MVC,MVP 和 MVVM 架构设计模式
MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 一.MVC MV ...
- CPU型号各个字母的含义
CPU 型号的含义 首先介绍 4 个数字的含义(以 i7-3540M) 第一位 3540M 中的 "3"代表:代, 3 表示第三代 第二位 3540M 中的 "5&quo ...
- 微信小程序分享
点击链接查看详情:(转发的路径的必须写正确) https://mp.weixin.qq.com/debug/wxadoc/dev/api/share.html