2016-04-15 16 views
0

Kann jemand Hilfe bei der Verwendung eines Textfelds in einer UiCollectionView geben? Was ich zu erreichen versuche, ist eine Sammlungsansicht, die Bilder für einen Benutzer enthält. Mit diesen Bildern möchte ich ihnen die Möglichkeit geben, jedes einzelne Bild zu beschriften. Das Problem, das ich habe, von dem ich sicher bin, dass es andere haben, ist das; Sobald ein Benutzer ein Textfeld eingibt, füllt die Eingabe später automatisch ein Textfeld.Textfeld in UICollectionViewCell Wiederverwendung von Text

Beispiel: 5 Bilder mit Textfeldern.

Bild 1 der Bildunterschrift Benutzertypen „Hallo“

Bild 2 der Bildunterschrift Benutzertypen „dort“

Bild 3 der Bildunterschrift Benutzertypen „Wie geht es Ihnen“

Vor allem Benutzer in das Textfeld ein für Bild 4 würde es lauten "Hallo"

Ich habe einen Beitrag auf Stapel gefunden, um vorteilhaft zu sein, aber ich verstehe immer noch nicht, was ich tun soll. Ich folgte den vorgeschlagenen Schritten; 1. Erstellen eines Arrays für die Textansichtseingaben 2. In der "textFieldDidEndEditing" -Methode das Hinzufügen der aktuellen Textfelder in das Array, wenn es nicht leer ist. Wo ich verwirrt bin, ist Schritt 3, @bhanu schlägt vor, "der Textfeldwert sollte aus dem Array eingegeben werden und es wird keinen Wert verlieren."

Antwort

0

Wenn Sie es geschafft haben, das Array von Textfeldeingaben zu speichern, sind Sie tatsächlich auf halber Strecke. Es fehlt jedoch noch eine Logik, um sicherzustellen, dass in Ihrem Textfeld die richtigen Werte anstelle von recyceltem Text angezeigt werden. Sie müssen auch ihre NSIndexPath speichern. Wie können Sie sonst wissen, zu welcher Zelle die Textfeldeingabe gehört?

var textInputs = [String]() 
var textFieldIndexPath = [NSIndexPath]() 

func textFieldDidEndEditing(textField: UITextField) { 

// store the textfield.text into "textInput" array 
// you might need to find a way to store NSIndexPath of the selected cell // into "textFieldIndexPath" array here. From the textField instance, you should be able to trace the NSIndexPath of the cell it belongs to 

} 

Dann in cellForItemAtIndexPath:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollViewCellIdentifier", forIndexPath: indexPath) as! UICollectionViewCell 

if textFieldIndexPath.contains(indexPath){ 
    cell.textField.text = textInput[indexPath.row] 
} 
} 

Beachten Sie, dass, was ich schrieb nur eine grobe Richtlinie, wie Sie Ihre Frage zu lösen. Letztendlich sollten Sie diesen Satz von Codes verfeinern, da er starr ist und anfällig für Bugs/Schlupflöcher ist. Aber ich hoffe, es hat Ihnen eine Idee gegeben, wie Sie das umgehen können.

Ich würde vorschlagen, ein Array von Tuples anstelle von zwei Arrays zu verwenden, obwohl mehr Flexibilität bieten.

+0

Vielen Dank dafür! Das sieht viel sauberer aus als die Logik, die ich benutzt habe. Meine Lösung war, dass ich ein Wörterbuch benutzte – Mar

+0

Ich war froh, dass ich helfen konnte. Mein Code ist grob und könnte einige Fehler verursachen, da er stark davon abhängt, dass beide Arrays synchronisiert sind. Also wäre es am besten, wenn Sie nur ein paar Hinweise daraus nehmen und es mit etwas saubererem, wie ich vorgeschlagen habe, Tupel-Array verfeinern oder wenn Sie mit Wörterbüchern umgehen könnten, wäre es auch gut – rach