2017-06-20 5 views
0

Ich habe die Funktion textFieldShouldEndEditing implementiert, um die in jedes Feld eingegebenen Daten zu validieren, bevor der Benutzer das Feld verlässt. Wenn die eingegebenen Daten die Validierung nicht bestehen, kann der Benutzer das Feld nicht verlassen.swift 3: Umgehen der Funktion TextFieldShouldEndEditing, wenn die Schaltfläche Zurück auf die Schaltfläche geklickt wird

Während dies funktioniert, ist das Problem, dass es ausgelöst wird, wenn der Benutzer auf die Schaltfläche Zurück navigiert. Aus welchem ​​Grund auch immer, wenn dies geschieht, wird der Controller der früheren Ansicht präsentiert. Wenn ich dann wieder in den View-Controller gehe, sind die Felder überhaupt nicht editierbar. Es wird keine Tastatur angezeigt, der Cursor geht nicht ins Feld, nichts.

Meine Frage ist, wie umgehe ich entweder die TextFieldShouldEndEditing Funktion, wenn der Benutzer auf die Schaltfläche Zurück klickt ODER wie kann ich erkennen, dass die Schaltfläche Zurück in meinen Validierungsfunktionen angeklickt wurde, so kann ich True zurück und vorbei an diesem Problem. Jede Hilfe wäre willkommen.

Hier ist meine textFieldShouldEndEditing func (die Validierung funcs genannt Rückkehr entweder wahr oder falsch):

internal func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { 
    if (tField.isEditing) { 
     return tFieldValidated() 
    } else if (oField.isEditing) { 
     return oFieldValidated() 
    } else { 
     return distanceFieldValidated() 
    } 
} 

Dies ist in schnellen 3 und Xcode 8.

Antwort

0

Ok, ich es herausgefunden. Hier ist, was ich tun musste:

1 - Ich habe eine globale boolean boolCancelled und setzen Sie es auf false. Dies wird verwendet, um zu kennzeichnen, ob auf die Schaltfläche Abbrechen geklickt wurde oder nicht.

2 - Übergehen Sie die Schaltfläche Zurück in der Navigationsleiste. Um dies zu tun, habe ich den folgenden Code in der viewDidLoad() -Methode:

self.navigationItem.setHidesBackButton(true, animated: false) 
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(RaceDetailVCClass.backButtonAction)) 

3 - ich auch eine backButtonAction Funktion erstellt:

func backButtonAction(){ 
    // set the boolean to True to indicate the Cancel button was clicked 
    boolCancelled = true 
    self.navigationController?.popToRootViewController(animated: true) 
} 

4 - Ausgefallene die boolCancelled auf false in viewDidLoad()

5 - einen Scheck für boolCancelled in der textFieldShouldEndEditing Funktion hinzugefügt:

internal func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { 
    if (boolCancelled) { 
     return true 
    } else if (tField.isEditing) { 
     return tFieldValidated() 
    } else if (oField.isEditing) { 
     return oFieldValidated() 
    } else { 
     return distanceFieldValidated() 
    } 
} 

Wenn ich jetzt auf die Schaltfläche "Abbrechen" klicke, gibt der TextFieldShouldEndEditing den Wert "true" zurück und alles funktioniert so, wie ich es brauche.

Verwandte Themen