ios swift uitextfield

ios - UITextField secureTextEntry alterna la fuente incorrecta



text field ios 11 (7)

Al activar la entrada de texto segura, configurar la fuente en nulo y volver a la normalidad me ayudó:

@objc func toggleSecureTextEntry(_ sender: UIButton) { isSecureTextEntry = !isSecureTextEntry updateShowButtonVisual() if !isSecureTextEntry { let oldFont = font font = nil font = oldFont } }

Tengo un UITextField que utilizo como campo de contraseña. Por defecto, se secureTextEntry establecido secureTextEntry en true . También tengo un UIButton para alternar entre mostrar / ocultar la contraseña.

Cuando cambio el campo de texto de secureTextEntry establecido en true a false , la fuente se vuelve rara. Parece que se convierte en Times New Roman o similar.

He intentado volver a configurar la fuente al sistema con el tamaño 14, pero no cambió nada.

Ejemplo de lo que sucede (con la secureTextEntry inicial de secureTextEntry en true ):

Mi código:

@IBAction func showHidePwd(sender: AnyObject) { textfieldPassword.secureTextEntry = !textfieldPassword.secureTextEntry // Workaround for dot+whitespace problem if !textfieldPassword.secureTextEntry { let tempString = textfieldPassword.text textfieldPassword.text = nil textfieldPassword.text = tempString } textfieldPassword.font = UIFont.systemFontOfSize(14) if textfieldPassword.secureTextEntry { showHideButton.setImage(UIImage(named: "EyeClosed"), forState: .Normal) } else { showHideButton.setImage(UIImage(named: "EyeOpen"), forState: .Normal) } textfieldPassword.becomeFirstResponder() }


Cambiar la fuente de UITextField no tendrá efecto hasta que primero establezca la fuente en nil. Intenta seguir.

textfieldPassword.font = nil textfieldPassword.font = UIFont.systemFontOfSize(14.0)


De hecho, para resolver el problema utilicé una combinación de las dos respuestas anteriores.

En mi caso particular, mi vista contiene solo dos campos. Asique :

  • Memorice el campo que tiene el foco (si lo hay).
  • Si el campo cambia a "no seguro", configuro la fuente a nula, la establezco de nuevo a su valor original y resignFirstResponder en el campo de texto.
  • Si el campo cambia "para asegurar", simplemente renuncio a PrimerResponder en el campo de texto.
  • En todos los casos, restauro el enfoque en el campo original (si existe).

Con este método, no tengo problema de mostrar / ocultar el teclado, funciona perfectamente.

Saludos. Sébastien.

BOOL loginTextFieldHadFocus = self.loginTextField.isFirstResponder; BOOL passwordTextFieldHadFocus = self.passwordTextField.isFirstResponder; if (self.passwordTextField.isSecureTextEntry) { self.passwordTextField.secureTextEntry = NO; self.passwordTextField.font = nil; self.passwordTextField.font = [UIFont systemFontOfSize:19.0 weight:UIFontWeightRegular]; [self.passwordTextField resignFirstResponder]; } else { self.passwordTextField.secureTextEntry = YES; [self.passwordTextField resignFirstResponder]; } if (loginTextFieldHadFocus) { [self.loginTextField becomeFirstResponder]; } else if (passwordTextFieldHadFocus) { [self.passwordTextField becomeFirstResponder]; }


Estos errores podrían ser arreglados de esta manera:

[self resignFirstResponder]; NSString *text = self.text; self.text = @" "; self.text = text; //here add some logic [self becomeFirstResponder];


Me he encontrado con este error antes. No estoy seguro de por qué sucede. Descubrí que si descartas el teclado y luego alternas la entrada de texto segura, no perderás el estilo de fuente.

textField.resignFirstResponder() textField.secureTextEntry = !self.textField.secureTextEntry textField.becomeFirstResponder()


Para swift, configure una propiedad bool para Mostrar y ocultar la contraseña después de que se asigne el método de carga falso desde la vista, luego haga el siguiente código cuando se haga clic en el botón Mostrar / Ocultar contraseña:

@IBAction func showHidePassword(sender: UIButton) { showPassword = !showPassword passwordTxtField.becomeFirstResponder() if (showPassword == true) { passwordTxtField.secureTextEntry = false let password = passwordTxtField.text! passwordTxtField.attributedText = NSAttributedString(string: password) }else{ passwordTxtField.secureTextEntry = true } sender.setTitle(showPassword == true ? "Hide" : "Show", forState: .Normal) }


passwordTextField.secureTextEntry = false let text = passwordTextField.text! passwordTextField.attributedText = NSAttributedString(string: text)

esto funciona para mi Esto solo estamos asignando una fuente usando una cadena atribuida. Sin embargo, parece un pequeño fallo.