iOS 12, здається, розпізнає паролі textFields також за isSecureTextEntry
властивістю, а не лише за textContentType
властивістю, тому зникнення цього виду аксесуарів насправді неможливе, якщо ви обидва не встановите для textContentType нічого та не видалите функцію secureEntry (і не спричините недолік безпеки у вашому додатку) потім заважає iOS 12 розпізнати textField як пароль textField і показати цей надокучливий вигляд аксесуарів.
У моєму випадку аксесуар спричинив помилку, через яку мій додаток не реагував на натискання (що також призвело до відхилення мого додатка в процесі перегляду програми). Тому мені довелося видалити цю функцію. Я не хотів відмовлятися від цієї функції безпеки, тому мені довелося вирішувати справи самостійно.
Ідея полягає в тому, щоб видалити функцію secureEntry, але додати її самостійно вручну. Це справді спрацювало:
Це можна зробити так:
Стрімкий 4-х шлях:
По-перше, як тут відповіли, встановіть textContentType
нічого:
if #available(iOS 10.0, *) {
passwordText.textContentType = UITextContentType("")
emailText.textContentType = UITextContentType("")
}
Потім оголосіть змінну String, яка пізніше міститиме наш реальний вміст textField:
var passwordValue = ""
Додайте ціль до passwordTextField, яка буде викликатися щоразу, коли зміняться вміст textField:
passwordText.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
Тепер ось що зробить магію, оголосити функцію, яка буде обробляти заміну тексту:
@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)
}
Нарешті, встановіть для textField autocorrectionType
значення.no
для видалення інтелектуального введення тексту:
passwordText.autocorrectionType = .no
Ось і все, використовуйте passwordValue
для входу в систему.
Сподіваюся, це комусь допоможе.
ОНОВЛЕННЯ
Він також ловить вставлені значення, забув додати його раніше.
textContentType
властивості поля для імені користувача та пароля значення.textContentType
- Це повинно повідомити iOS 11, що ваші поля не є полями для імені користувача / пароля (навіть якщо вони є) і запобігти відображенню подання аксесуарів; Щось на зразок `self.passwordField.textContentType = .textContentType`