zoukankan      html  css  js  c++  java
  • 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,  200, height: 30))
    textField?.placeholder = "替换后密文"
    view.addSubview(textField!)
    NSLog("textField值: %@", textField?.text ?? "")
    
  • 相关阅读:
    初窥语义搜索
    爬取菜谱网站
    paramiko简介
    软件项目结构规范
    paramiko 远程执行多个命令
    python 中in 的 用法
    spring依赖(部分)
    ModelAndView的部分回顾
    SringMVC 国际化
    spring事物配置,声明式事务管理和基于@Transactional注解的使用
  • 原文地址:https://www.cnblogs.com/Milo-CTO/p/9414335.html
Copyright © 2011-2022 走看看