2017-09-04 1 views
0

Ich habe eine lange Liste von Textfeldern, also verwende ich eine TableView.Swift TableView ändert den Wert einer zufälligen Zelle, wenn eine Zelle bearbeitet wird

this is how the screen looks like

Wenn ich einen Text in einem Textfeld in einer der Zellen einfügen und nach unten scrollen, um einige der anderen Zellen erhalten die gleiche Textfeld Wert. Ich habe keine Ahnung, warum das passieren würde.

Dies ist mein Code jetzt:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! RelatieToevoegenCell 
    cell.label.text = items[indexPath.row] 
    cell.textfield.placeholder = items[indexPath.row] 
    return cell 

} 
+0

Wie gehen Sie mit der Bearbeitung des Textfelds um? Bitte geben Sie etwas mehr Kontext. –

+0

@ DávidPásztor im Moment mache ich nichts mit den Textfeldern, ich tippe nur eines von ihnen ein und andere Textfelder in verschiedenen Zellen bekommen den gleichen Text wenn ich runterscrolle –

Antwort

1

Ihr Hauptproblem ist, dass Sie Ihre Daten innerhalb Views (UITableVieCell) halten.

Zellen werden von UITableView wiederverwendet, um die Leistung zu optimieren. Selbst wenn Sie also 1milion Zeilen in Ihrer Tabelle haben, sind nur wenige UITableViewCells im Speicher (so viele, wie normalerweise auf dem Bildschirm sichtbar sind).

Wenn Sie dequeueReusableCell aufrufen, benötigt es eine der bereits vorhandenen Zellen und verwendet sie erneut.

Um dieses Problem zu lösen, müssen Sie Ihre Daten separat in einem Array aufbewahren und geänderte Texte dort aufbewahren. Dann müssen Sie den von Ihnen geposteten Code ändern, um jedes Mal, wenn Sie UITableView von Ihrer "dataSource" konfigurieren, Daten zu übernehmen.

Auch eine gute Praxis ist, UITableViewCell zurückzusetzen, wenn es wiederverwendet wird, können Sie dies tun, indem Sie Codierung in prepareForReuse hinzufügen - aber das ist optional, wie Text von Ihrer Datenquelle sowieso gesetzt wird.

Ich würde auch empfehlen, diese zu lesen, bevor Sie weitere Codierung starten - es wird erlauben zu verstehen, wie UITableView auf iOS funktioniert:

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW1

0

Grundsätzlich müssen Sie die Werte in view- erhalten und zu speichern Controller, weil Sie aufgrund des wiederverwendbaren Verhaltens von UITableViewCell die Referenz der unsichtbaren Zelle mit der gesamten untergeordneten Referenz verloren haben.

So können Sie den Textfeldwert durch die textViewDidChange Aktion in RelatieToevoegenCell Klasse speichern.

Verwandte Themen