2015-05-22 15 views

cevap

4

2 seçenekleri:

  1. güvenli giriş seçeneği olmadan normal bir metin alanını kullanın. Bir kullanıcı bir karakter girdiğinde, onu bir string değişkenine kaydedin ve mermiler yerine sunmak istediğiniz karakterle birlikte metin alanına değiştirin. UITextField secureTextEntry bullets with a custom font?
1

:

var password: String = "" 
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 
{ 
    password = password+string 
    textField.text = textField.text+"$" 
    println("\(password)") 
    return false 
} 
burada
  • çek dışarı cevapları
      : İşte

  • ($$$$ olarak şifre gösterecektir) kodu bulunuyor Ron.Kliffer'in fikrine dayanarak, çalışılabilir tüm kodu uygulayabildim:

    // 
    // PasswordTextField.swift 
    // CrifanLibSwift 
    // 
    // Created by licrifan on 16/7/8. 
    // Copyright © 2016年 licrifan. All rights reserved. 
    // 
    
    import UIKit 
    
    class PasswordTextField: CommonTextField, UITextFieldDelegate { 
        var realText:String { 
         didSet { 
          print("self.text=\(self.text), realText=\(realText)") 
    
          updateMaskStr() 
         } 
        } 
        var maskChar:Character 
    
        init(frame: CGRect = CGRectZero, maskChar:Character = "*") { 
         print("frame=\(frame), maskChar=\(maskChar)") 
    
         self.realText = "" 
         self.maskChar = maskChar 
    
         super.init(frame: frame) 
    
         self.secureTextEntry = false 
    
         self.addTarget(self, action: #selector(self.textFiledEditingChanged(_:)), forControlEvents: UIControlEvents.EditingChanged) 
    
         self.delegate = self 
    
        } 
    
        required init?(coder aDecoder: NSCoder) { 
         fatalError("init(coder:) has not been implemented") 
        } 
    
        func updateMaskStr(){ 
         print("before update: self.text=\(self.text), self.realText=\(self.realText)") 
    
         //change real text to mask char 
         var maskStr = "" 
         for _ in self.realText.characters { 
          maskStr += String(self.maskChar) 
         } 
    
         self.text = maskStr 
    
         print("after update: self.text=\(self.text), self.realText=\(self.realText)") 
        } 
    
        func textFiledEditingChanged(textField: UITextField) { 
         print("textField=\(textField), textField.text=\(textField.text)") 
    
         updateMaskStr() 
        } 
    
        func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
         print("textField=\(textField), range=\(range), string=\(string)") 
    
         var allow = true 
         let curText = self.realText 
         let updatedStr:String = (curText as NSString).stringByReplacingCharactersInRange(range, withString: string) 
    
         if updatedStr.characters.count > LoginRegisterPasswordLengthMax { 
          print("password exceed max length \(LoginRegisterPasswordLengthMax)") 
          allow = false 
         } 
    
         if allow { 
          self.realText = updatedStr 
         } 
    
         print("curText=\(curText), updatedStr=\(updatedStr), self.realText=\(self.realText)") 
    
         return false 
        } 
    } 
    

    ve başka görünümde EditInfoView.swift içinde orayı kullanmak: nihayet

    class EditInfoView: UIView { 
    
        var passwordTextField:PasswordTextField 
    
        init(editMode:EditInfoMode) { 
    
         self.passwordTextField = PasswordTextField() 
    
         self.addSubview(self.passwordTextField) 
    
         if self.passwordTextField.notHidden { 
          //5. password text 
          var passwordPlaceholder = "密码(6-20位)" 
          if self.editMode == .ChangeLoginPassword { 
           passwordPlaceholder = "旧密码(6-20位)" 
          } else if self.editMode == .ForgotPassword { 
           passwordPlaceholder = "输入新密码(6-20位)" 
          } 
    
          self.passwordTextField.placeholder = passwordPlaceholder 
          self.passwordTextField.returnKeyType = UIReturnKeyType.Go 
    //   self.passwordTextField.secureTextEntry = true 
          constrain(passwordTextField, smsCodeTextField, phoneTextField) {passwordTextField, smsCodeTextField, phoneTextField in 
           passwordTextField.centerX == passwordTextField.superview!.centerX 
           passwordTextField.width == passwordTextField.superview!.width - 2 * LoginRegisterPaddingX 
           passwordTextField.height == CommonTextFieldHeight 
    
           if self.editMode == .ChangeLoginPassword { 
            passwordTextField.top == passwordTextField.superview!.top + EditInfoViewTopPadding 
           } else { 
            passwordTextField.top == smsCodeTextField.bottom + EditInfoViewCommonPaddingY 
           } 
          } 
         } 
    } 
    

    gerçek kullanımına bir görünüm denetleyicisi EditInfoViewController.swift o:

    isValid = validatePassword(self, alertPrefix: alertPrefix, passwordStr: self.editInfoView.passwordTextField.realText, doAlertWhenInvalid: doAlertWhenInvalid) 
    

    nihai etkisi: Eh

    enter image description here

    İlgili konular