UITextField设置密文延时处理---仿QQ登录密码输入
系统的UITextField输入的时候最后一个字符会有1-2s的效果展示, 效果如下:

为了解决这个问题, 可以用字符 "●" 替换, 替换后效果如下:

用到的是UITextField的代理方法textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool, 进行替换, 代码如下:
import UIKit
class MLSecureTextEntryTextField: UIView {
var text = ""
var mTextField = UITextField()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
override func awakeFromNib() {
super.awakeFromNib()
setupUI()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
fileprivate func setupUI(){
mTextField = UITextField.init(frame: self.bounds)
mTextField.keyboardType = .default
mTextField.font = UIFont.systemFont(ofSize: 15)
mTextField.isSecureTextEntry = true
mTextField.delegate = self
addSubview(mTextField)
}
open var placeholder = "" {
didSet{
mTextField.placeholder = placeholder
}
}
var font = UIFont.systemFont(ofSize: 11) {
didSet{
mTextField.font = font
}
}
var textColor = UIColor.blue {
didSet{
mTextField.textColor = textColor
}
}
var keyboardType = UIKeyboardType.default {
didSet{
mTextField.keyboardType = keyboardType
}
}
}
extension MLSecureTextEntryTextField: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.count == 0 {
// 删除
text.remove(at: text.index(before: text.endIndex))
}else{
// 添加
text = text + string
}
var textStr = ""
for _ in text {
textStr = textStr + "●"
}
textField.text = textStr
return false
}
}
使用方法:
textField = MLSecureTextEntryTextField(frame: CGRect(x: 20, y: 150, width: 200, height: 30))
textField?.placeholder = "替换后密文"
view.addSubview(textField!)
NSLog("textField值: %@", textField?.text ?? "")
UITextField设置密文延时处理---仿QQ登录密码输入的更多相关文章
- 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...
- Android仿QQ登录下拉历史列表
demo中包含了Sqlite数据库增删改查,对存储的账号进行按照最新的时间排序,限制了最多存储5条数据. 效果图: 1.首先创建MyHelper建表: public class MyHelper ex ...
- WPF开发实例——仿QQ登录界面
原文:WPF开发实例--仿QQ登录界面 版权声明:本文为博主原创文章,如需转载请标明转载地址 http://blog.csdn.net/u013981858 https://blog.csdn.net ...
- JavaSwing仿QQ登录界面,注释完善,适合新手学习
使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...
- 32.qt quick-模仿QQ登录界面实现3D旋转(Rotation、Flipable)
要想模仿QQ登录界面的3D旋转,我们需要学习Rotation和Flipable.由于没找到QQ的资源图,所以我们以两个图片为例模仿QQ的3D旋转,如下图所示: 最终效果如下所示: 1.Rotation ...
- 零基础~仿qq登录界面
html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- Android 高仿微信支付密码输入控件
像微信支付密码控件,在app中是一个多么司空见惯的功能.最近,项目需要这个功能,于是乎就实现这个功能. 老样子,投篮需要找准角度,变成需要理清思路.对于这个"小而美"的控件,我们思 ...
- 修改了/etc/fstab之后出现登录密码输入之后又返回登录界面的问题
最后那一个挂载到/home下面的盘是我新增加的,如果注释掉就一切正常,如果取消注释,就会发生标题说的问题. 后来我意思都这样直接挂载,导致/home下面原本的东西不在了,注释掉之后再来看,发现下面确实 ...
- 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框
上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...
随机推荐
- OTA之流式更新及shell实现
在OTA升级时,需要从网络下载OTA包,并写到flash上的对应分区中. 最简单的方式是将下载与更新分离,先将完整的数据包下载到本地,再将本地的OTA包更新到flash上.方便可靠. 但这种方式的问题 ...
- 64_p9
python2-termcolor-1.1.0-11.fc26.noarch.rpm 12-Feb-2017 14:05 13610 python2-terminado-0.6-2.fc26.noar ...
- CentOS 7 中 Docker 的安装
CentOS 7 中 Docker 的安装 Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: [root@loc ...
- SilverLight高亮显示文本
文笔不好,就长话短说,就是想实现这样的效果,比如在成都二环路南一段一号附一号凤舞九天网吧 ,搜索 二环路 九天网吧 然后结果中高亮显示. <local:TextBlockHighLight Te ...
- HDRtools-OpenExr
转:http://blog.csdn.net/lqhbupt/article/details/7917764 OpenEXR是由工业光魔(Industrial Light& Magic)开发的 ...
- Linux平台上SQLite数据库教程(一)——终端使用篇
https://blog.csdn.net/u011192270/article/details/48031763 https://blog.csdn.net/fml1997/article/deta ...
- 开源IDS系列--snorby 进程正常,但是worker无法启动 The Snorby worker is not currently running
设置页面报错: The Snorby worker is not currently running. It's imperative you start the worker immediate ...
- .NET 社区汇总
英文社区: 名称:MSDN 地址:http://msdn.microsoft.com/zh-cn/default.aspx 描述:这个网站是大家学.Net的初始网站,也是.net方面官方和权威的资料, ...
- ubuntu调错
最近运行一个程序,出现错误 ’event.h‘,猜想是缺少event lib 库 于是安装sudo apt-get install libevent-dev 即可.
- fastadmin: layer.open 弹出层如何在表单提交之后自动关闭?
需要在控制器对应的js文件中添加 Form.api.bindevent($("form[role=form]")); define(['jquery', 'bootstrap' ...