Ich habe einen View-Controller mit zwei UITableViewCells
und jede Zelle enthält eine UITextField
. In meiner Navigationsleiste habe ich eine rechte Leiste namens "Speichern", die deaktiviert ist, es sei denn, beide Textfelder enthalten Text. Der Standardzustand der Schaltfläche zum Speichern ist deaktiviert. Der Übergang von deaktiviert zu aktiviert funktioniert gut, aber die Schaltfläche zu deaktivieren, wenn eines der Textfelder geleert wird, ist schwierig.Ermitteln, ob UITextfield leer ist, nachdem Zeichen nacheinander gelöscht wurden
ich zur Zeit mache wie folgt zusammen:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if title == "Password"{
if textField.tag == 1{
if (textField.text?.isEmpty)!{
passwordField1Empty = true
}
else {
passwordField1Empty = false
}
}
else if textField.tag == 2 {
if (textField.text?.isEmpty)! {
passwordField2Empty = true
}
else {
passwordField2Empty = false
}
}
if passwordField1Empty == false && passwordField2Empty == false {
self.navigationItem.rightBarButtonItem?.isEnabled = true
}
else {
self.navigationItem.rightBarButtonItem?.isEnabled = false
}
}
else {
self.navigationItem.rightBarButtonItem?.isEnabled = true
}
return true
}
Was ist das Problem verursacht ist, wenn ein Benutzer geht zurück und löscht jedes Zeichen in das Textfeld eins nach dem anderen, wird textField.text?.isEmpty
jedes Mal aufgerufen. Wenn ein letztes Zeichen übrig ist, wird textField.text?.isEmpty
vor dem Löschen des letzten Zeichens aufgerufen, so dass es false zurückgibt. textField.text?.isEmpty
gibt erst dann True zurück, wenn der Benutzer die Löschschaltfläche noch einmal drückt, obwohl nichts mehr gelöscht werden kann.
Dies macht den Job, außer 'newString' hat keine' text' -Eigenschaft - es ist nur 'newString.isEmpty'. – Brosef
Oh, stimmt. Entschuldige mich für den Fehler! Habe gerade meine Antwort bearbeitet! –