iOS 12 scheint das Kennwort textFields auch nach isSecureTextEntry
Eigenschaften und nicht nur nach textContentType
Eigenschaften zu erkennen. Daher ist es nicht wirklich möglich, diese Zubehöransicht auszublenden, es sei denn, Sie setzen beide textContentType auf nichts und entfernen die SecureEntry-Funktion (und verursachen eine Sicherheitslücke in Ihrer App) verhindert dann, dass iOS 12 das textField als Kennwort textField erkennt und diese nervige Zubehöransicht anzeigt.
In meinem Fall verursachte das Zubehör einen Fehler, der dazu führte, dass meine App beim Tippen nicht mehr reagierte (wodurch meine App auch im App-Überprüfungsprozess abgelehnt wurde). Also musste ich diese Funktion entfernen. Ich wollte dieses Sicherheitsmerkmal nicht aufgeben, also musste ich die Dinge selbst lösen.
Die Idee ist, die SecureEntry-Funktion zu entfernen, sie jedoch manuell hinzuzufügen. Es hat funktioniert:
Es kann so gemacht werden:
Schneller 4-Wege:
Zunächst, wie hier beantwortet, textContentType
auf nichts gesetzt:
if #available(iOS 10.0, *) {
passwordText.textContentType = UITextContentType("")
emailText.textContentType = UITextContentType("")
}
Deklarieren Sie dann eine String-Variable, die später unseren textField-Realinhalt enthält:
var passwordValue = ""
Fügen Sie dem passwordTextField ein Ziel hinzu, das jedes Mal aufgerufen wird, wenn sich der textField-Inhalt ändert:
passwordText.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
Das ist es, was die Magie bewirkt. Deklarieren Sie die Funktion, die die Textersetzungen übernimmt:
@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)
}
Stellen Sie schließlich textField's autocorrectionType
auf ein .no
, um prädiktiven Text zu entfernen:
passwordText.autocorrectionType = .no
Verwenden passwordValue
Sie diese Option, um Ihre Anmeldung durchzuführen.
Hoffe es wird jemandem helfen.
AKTUALISIEREN
Es fängt auch eingefügte Werte ab und hat vergessen, sie vorher hinzuzufügen.
textContentType
Eigenschaft des Felds für Benutzername und Kennwort auf.textContentType
- festzulegen. Dies sollte iOS 11 mitteilen, dass Ihre Felder keine Felder für Benutzername / Kennwort sind (obwohl dies der Fall ist), und verhindern, dass die Zubehöransicht angezeigt wird. So etwas wie "self.passwordField.textContentType = .textContentType"