Zugriff auf Custom Cells außerhalb der Methode CellForRowAtIndexPath

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zugriff auf Custom Cells außerhalb der Methode CellForRowAtIndexPath

    Hallo zusammen,

    ich möchte außerhalb der Methode cellForRowAtIndexPath auf die Custom Cells der Tabelle zugreifen.
    Probiert habe ich es auf diesem Weg: Stackoverflow

    Jedoch funktioniert es anscheinend nicht mit Custom Cells.


    Quellcode

    1. for(var i = 0; i < ...){
    2. let indexPath = NSIndexPath(forRow: i, inSection: 0)
    3. let cell = self.ibo_tableView.cellForRowAtIndexPath(indexPath) as! CACSetTableViewCell
    4. }
    Ich bekomme immer diesen Fehler, egal welche Row und Section ich übergebe.
    Die TableView hat 4 Sections mit weitaus mehr als 5 rows. In der For-Schleife scheitert er bereits bei i == 0 && section == 0

    fatal error: unexpectedly found nil while unwrapping an Optional value

    Hat jemand damit Erfahrung?



    8|
    lernen, lernen, lernen :)
  • Hi,

    ich habe eine Tabelle mit n Section und n Rows. Diese Zellen haben jeweils in der Tabelle ein UILabel und ein UITextField. Der Benutzer kann die UITextFields bearbeiten, ganze Zellen löschen oder Standardflags setzen.
    Ich möchte die modifizierten Texte aus den jeweiligen UITextFields auslesen. Dazu muss ich von außen auf die UITextField der jeweiligen Zelle zugreifen können.

    Ich muss hier eine For-Schleife implementieren, da dieser Auslesevorgang nach dem Betätigen eines "Speichern"-Buttons durchgeführt werden soll. Das bedeutet der Benutzer drückt auf "Speichern" und ich würde dann alle Zellen durchgehen und die UITextFields auslesen.
    lernen, lernen, lernen :)
  • Die Doku hilft:

    Apple Doku schrieb:

    An object representing a cell of the table, or nil if the cell is not visible or indexPath is out of range.

    imoney91 schrieb:

    ch muss hier eine For-Schleife implementieren, da dieser Auslesevorgang nach dem Betätigen eines "Speichern"-Buttons durchgeführt werden soll. Das bedeutet der Benutzer drückt auf "Speichern" und ich würde dann alle Zellen durchgehen und die UITextFields auslesen.
    Ungünstiger Ansatz; über Delegation geht's besser:
    1. Für die Zellen eine Unterklasse von UITableViewCell erstellen.
    2. Ein passendes Delegate-Protokoll für die Zell-Klasse erstellen.
    3. Die Zelle empfängt die Actions der UI-Elemente und leitet sie an das Delegate weiter.
    4. Tableview-Controller ist natürlich das Delegate seiner Zellen.
    „Meine Komplikation hatte eine Komplikation.“
  • Zum Glück habe ich nachgefragt :D
    In der Tat der falsche Ansatz, wie vermutet.

    Ich würde es auch so, wie von macmoonshine vorgeschlagen lösen.

    Alternativ kannst Du auch die Zelle mit einem eigenen -init und Controller instanzieren. Dann könntest Du die Action vom Textfeld gleich an den Setter des Controllers weiterreichen.

    Lies noch was zu den Tabellen und der Lebenszeit von Zellen.
    Dann wird Dir klar, weshalb es ungünstig ist mit einer Schleife dadrüber gehen zu wollen.
    Zumal es total ineffizient ist, da Du bei der Anwendereingabe sofort weißt was sich geändert hat.

    Viele Grüße
  • Da die TableViewCells beim Scrollen im TableView recyclet werden, ist es nicht möglich aus Zellen, welches sich ausserhalb des sichtbaren Bereichs befinden, Inhalte auszulesen.

    Du musst die Änderungen in einer Zelle also direkt nach der Änderungen übernehmen. Wenn diese Änderungen erst nach dem Betätigen von Speichern übernommen werden sollen, dann musst Du die Werte entsprechend zwischen speichern oder mit einer Kopie des Datenmodels arbeiten.