Wie bekomme ich die Zelle für einen IndexPath, der momentan nicht in der Tabelle sichtbar ist? (Zelle ist außerhalb des Bereichs)
Code zum Abrufen meiner Zelle:
%Vor% -cellForRowAtIndexPath...
gibt nil
zurück, da die Zelle im erforderlichen indexPath außerhalb des Bereichs liegt. Also, wie bekomme ich die richtige Zelle und nicht nil?
So funktioniert das nicht. Sie müssen die Informationen erfassen und speichern, sobald sie eingegeben oder geändert werden. Es kann leicht außer Reichweite geraten und Sie können nicht garantieren, dass Ihre Zelle lange genug lebt. Nun, technisch kann man es behalten (und immer dieselbe Zelle für denselben Indexpfad zurückgeben), aber ich würde dieses Design in Frage stellen.
Das UITableView
behält nur die sichtbaren Zellen bei. Wenn Sie eines brauchen, das nicht sichtbar ist, müssen Sie tableView:cellForRowAtIndexPath:
von UITableView
dataSource
aufrufen. Also, wenn self eine Klasse ist, die dataSource
ist:
UITableViewCells werden so erstellt, dass sie so wiederverwendet / recycelt werden, dass die Benutzer nicht mehr Zellen als die Anzahl der sichtbaren erstellen müssen. Sie müssen normalerweise nicht auf eine Zelle zugreifen, die nicht sichtbar ist. Es sollte ausreichen, dass Sie auf Ihre Datenquelle zugreifen und dort die entsprechenden Daten abrufen / einstellen. Zellen dienen zum Anzeigen eines Zustands der Datenquelle. Nicht die Datenquelle selbst:)
Bearbeiten:
Sie sagten, Sie brauchen etwas Information (Text) von einer Zelle oben, richtig? Wenn Sie die Methode cellForRowAtIndexPath:
verwenden, wird die Zelle neu erstellt, aber Sie erhalten möglicherweise nicht den Text, der sich im Textfeld befand. Der Grund? weil du es wahrscheinlich nicht woanders gespeichert hast. Wenn Sie es gespeichert haben, greifen Sie direkt darauf zu, anstatt durch die Zelle zu gehen.
Sind die Informationen zum Füllen Ihrer Tabelle aus einem Array? Könnten Sie das nicht direkt aus dem Array mit dem Index 0 herausholen, so wie Ihr cellForRowAtIndexPath diese Zelle vermutlich abrufen und füllen würde, wenn sie angezeigt wird?
Weiter zu @ Raphaels Antwort, Hier ist die (funktionierende) swift 3 Lösung:
UITableViewCell cell = self.tableView(self.tableView, cellForRowAt: indexPath)
Tags und Links iphone uitableview ios