Wygląda na to, że iOS 12 rozpoznaje hasło textFields również po isSecureTextEntry
właściwości, a nie tylko po textContentType
właściwości, więc zniknięcie tego widoku akcesoriów nie jest naprawdę możliwe, chyba że oboje ustawicie textContentType na nic i usuniecie funkcję secureEntry (i spowoduje to lukę bezpieczeństwa w aplikacji) następnie uniemożliwia systemowi iOS 12 rozpoznanie textField jako hasło textField i wyświetlenie tego denerwującego widoku akcesoriów.
W moim przypadku akcesorium spowodowało błąd, który powodował, że moja aplikacja nie odpowiadała po dotknięciu (co również spowodowało odrzucenie mojej aplikacji w procesie przeglądu aplikacji). Musiałem więc usunąć tę funkcję. Nie chciałem rezygnować z tej funkcji bezpieczeństwa, więc musiałem sam rozwiązywać problemy.
Chodzi o to, aby usunąć funkcję secureEntry, ale dodać ją ręcznie. Zadziałało:
Można to zrobić w ten sposób:
Swift 4-drożny:
Najpierw, zgodnie z odpowiedzią tutaj, ustaw textContentType
na nic:
if #available(iOS 10.0, *) {
passwordText.textContentType = UITextContentType("")
emailText.textContentType = UITextContentType("")
}
Następnie zadeklaruj zmienną typu String, która później będzie zawierała prawdziwą zawartość textField:
var passwordValue = ""
Dodaj cel do passwordTextField, który będzie wywoływany za każdym razem, gdy zmieni się zawartość textField:
passwordText.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
Teraz właśnie to zrobi magię, zadeklaruj funkcję, która będzie obsługiwać zamiany tekstu:
@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)
}
Wreszcie Set textField to autocorrectionType
aby .no
usunąć tekst predykcyjną:
passwordText.autocorrectionType = .no
To wszystko, użyj, passwordValue
aby zalogować się.
Mam nadzieję, że to komuś pomoże.
AKTUALIZACJA
Łapie również wklejone wartości, zapomniałem go wcześniej dodać.
textContentType
na.textContentType
- Powinno to powiedzieć iOS 11, że twoje pola nie są polami nazwy użytkownika / hasła (mimo że są) i uniemożliwić wyświetlenie widoku akcesoriów; Coś w rodzaju `self.passwordField.textContentType = .textContentType`