iOS 12 parece reconocer los campos de texto de contraseña también por isSecureTextEntry
propiedad y no solo por textContentType
propiedad, por lo que hacer desaparecer esta vista de accesorios no es realmente posible a menos que ambos establezcan textContentType en nada y eliminen la función de entrada segura (y causen una falla de seguridad en su aplicación) que luego evita que iOS 12 reconozca el campo de texto como un campo de texto de contraseña y muestre esta molesta vista de accesorios.
En mi caso, el accesorio causó un error que hizo que mi aplicación no respondiera cuando se tocaba (lo que también hizo que mi aplicación fuera rechazada en el proceso de revisión de la aplicación). Entonces tuve que eliminar esta función. No quería renunciar a esta función de seguridad, así que tuve que resolver las cosas por mi cuenta.
La idea es eliminar la función secureEntry pero agregarla usted mismo manualmente. Funcionó:
Se puede hacer así:
Rápido de 4 vías:
Primero, como se responde aquí, establezca textContentType
nada:
if #available(iOS 10.0, *) {
passwordText.textContentType = UITextContentType("")
emailText.textContentType = UITextContentType("")
}
Entonces, declare una variable String que luego contendrá nuestro contenido real de textField:
var passwordValue = ""
Agregue un objetivo a passwordTextField, que se llamará cada vez que cambie el contenido de textField:
passwordText.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
Ahora eso es lo que hará la magia, declare la función que manejará los reemplazos de texto:
@objc func textFieldDidChange(_ textField: UITextField) {
if textField.text!.count > 1 {
if passwordValue.count == 0 {
passwordValue = String(textField.text!)
} else {
passwordValue += textField.text!.substring(from: passwordValue.count)
}
} else {
if textField.text!.count > passwordValue.count {
passwordValue += String(textField.text!.last!)
} else if textField.text!.count < passwordValue.count {
passwordValue = String(passwordValue.dropLast())
}
}
self.passwordText.text = String(repeating: "•", count: self.passwordText.text!.count)
}
Por último, Conjunto textField es autocorrectionType
que .no
para eliminar el texto predictivo:
passwordText.autocorrectionType = .no
Eso es todo, utilícelo passwordValue
para realizar su inicio de sesión.
Espero que ayude a alguien.
ACTUALIZAR
También captura valores pegados, se olvidó de agregarlos antes.
textContentType
propiedad del campo de nombre de usuario y contraseña en.textContentType
: esto debería indicarle a iOS 11 que sus campos no son campos de nombre de usuario / contraseña (aunque lo sean) y evitar que se muestre la vista de accesorios; Algo como `self.passwordField.textContentType = .textContentType`