2016-07-19 1 views
2

Ich mache eine App mit swift, die die Einträge in 6 Textfelder nimmt und sie durch ein Segment in ein leeres String-Array auf einem zweiten View-Controller übergibt. Wie mache ich das?Textfelder in ein String-Array segnen

Dies ist mein Code, ist die Grundlagen, aber ich bin mir nicht sicher, wie ich die Informationen durch senden kann.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    let destination = segue.destinationViewController as! secondView 

    if segue.identifier == segueID { 

     destination.stringArray = ? 

    } 

} 

Das Array auf meinem zweiten View-Controller ist dies:

var stringArray = [String]() 

Antwort

2

Der kürzeste Weg:

destination.stringArray = view.subviews.flatMap { ($0 as? UITextField)?.text } 
+0

Der Fragesteller hat nicht unbedingt gesagt, dass alle Textfelder in der Ansicht verwendet werden sollen. Dies berücksichtigt auch keine Textfelder mehr als 1 Ebene in der Ansichtshierarchie (dh in einer Unteransicht enthalten). – Connor

+0

Natürlich muss es neu geschrieben werden, falls es mehr Hierarchieebenen gibt. Das ist ein sehr guter Punkt :) Meine Antwort zeigt, wie man es in kurzer Zeit erreicht, wenn alle Textfelder Subviews einer Grundansicht sind. – fiks

+0

Eigentlich funktionierte dieser wie ein Zauber. Entschuldigung, ich war nicht sehr spezifisch in meiner Frage. Alle Textfelder müssen verwendet werden oder es wird eine Warnung angezeigt, die verhindert, dass der Übergang stattfindet. Vielen Dank für diesen. Einfach und direkt auf den Punkt. :) – art3mis

1

Ihre 6 Textfelder in einer IBOutletCollection (in anderen Worten, eine Reihe von Textfeldern) oder sind sie jeweils ihr eigenes IBOutlet (Textfeld) So oder so, kommt Ihre Frage nach unten, um alle ihre Textwerte in einem Array setzen, die wie dies getan werden kann, wenn sie in einem IBOutletCollection sind:

destination.stringArray = myTextFieldCollection.flatMap { $0.text } 

Oder, wenn sie nicht in einem Array sind:

destination.stringArray = [myTextField1, myTextField2, ..., 
    myTextField6].flatMap { $0.text } 

ich verwende flatMap in diese, weil UITextField.text eine optionale String? ist, so müssen sie String ausgepackt werden, was flatMap sicher tut.

+0

Beachten Sie, dass diese nicht als 'stringArray' in destionation funktioniert nicht optional' String' Einträge ermöglichen. – dfri

+0

Guter Fang, behoben. – Connor