Ich versuche, einen Zeichenfolgenwert mit einem Delegaten an den vorherigen Ansichtscontroller zurückzugeben. Alles scheint korrekt zu funktionieren, außer dass der zurückgegebene Zeichenfolgenwert aus irgendeinem Grund nicht im UITextField im ersten View Controller angezeigt wird, wo ich es haben möchte.Problem beim Zurückgeben einer Zeichenfolge an vorherigen Ansichtscontroller in Swift
Hier ist mein entsprechender Code:
Viewcontroller "B" (die die Daten zurück zum vorherigen View-Controller vorbei):
protocol CountryFieldProtocol {
func setField(countryName: String)
}
class TableViewController: UITableViewController {
var countryProtocol: CountryFieldProtocol?
...
func dismiss() {
for item in countries {
if item.isSelected == true {
print("what is the country selected?" + item.name)
countryProtocol?.setField(item.name)
}
}
self.navigationController?.popViewControllerAnimated(true)
}
Hier ist der Code in Viewcontroller "A" (das man die Daten von View Controller "B") empfangen:
func setField(countryName: String) {
textField.text = countryName
print("the country selected is:" + textField.text!)
}
@IBAction func textFieldEditing(sender: AnyObject) {
textField.resignFirstResponder()
let tableViewController = self.storyboard?.instantiateViewControllerWithIdentifier("CountryList") as? TableViewController
tableViewController?.countryProtocol = self
self.navigationController?.pushViewController(tableViewController!, animated: true)
}
In meinem obigen Code, der zweite View Controller aufgerufen wird, wenn der Benutzer das Textfeld auswählt. Der Benutzer wird dann zu einer UITableView geleitet, wo der Benutzer ein Element aus der Liste auswählen kann. Nachdem die Auswahl getroffen wurde, klickt der Benutzer in der Navigationsleiste auf die Schaltfläche "Fertig" und sollte zum ersten View-Controller zurückgebracht werden.
Theoretisch sollte die Benutzerauswahl aus der Liste im Textfeld des ersten View Controllers erscheinen. Während die Auswahl von der setField-Funktion im ersten View-Controller auf der Konsole ausgegeben wird, wird die Zeichenfolge leider nicht im textField angezeigt. Kann jemand sehen, was ich falsch mache?
Ihr Ansatz ist nicht gut, wenn Sie ein Formular erstellen, empfehle ich mit Eureka: https://github.com/xmartlabs/Eureka –
Können Sie zeigen, wo Sie 'countryProtocol' auf Ansicht Controller b setzen – Paulw11
Sie löschen die Textfeld Wert in viewWillAppear oder viewDidAppear? Beide Funktionen werden nach setField aufgerufen. Wenn ich das Projekt nur mit dem von Ihnen geposteten Code erstelle, funktioniert alles. –