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.