prototype cell - UISegmentedControl ändern

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

  • prototype cell - UISegmentedControl ändern

    Hi zusammen,

    ich habe eine View, mit einer Tabelle, diese mit einer PrototypeCell.
    Die Cell hat ein Label und ein SegmentedControl.

    Wenn ich das SegmentedControl ändere, funktioniert alles wie gewünscht. :thumbup:

    Auf der View gibt es allerdings noch ein Button, der das SegmentedControl wieder reseten soll, also alles wieder auf den Ausgangswert stellen soll. Später möchte ich die Daten von dem SegmentedControl in eine Datenbank speichern, das kann ich mir denke ich aber aus dem Beispiel zum reseten irgendwie ableiten.

    Im Moment gehen mir leider die Ideen aus, wie ich das hinbekomme. ?(

    Wäre bitte jemand so nett und hilft mir auf die Sprünge?

    Vielen Dank
    Björn
  • Ein Weg wäre, die UITableViewCell über eine eigene Subklasse zu realisieren - in der z. B. auch das Layout vorgenommen wird. Diese hat ein Property für das SegmentedControl. Dann könntest Du über die Zellen der UITableView iterieren und das Control ändern. Aber Achtung: Zellen werden in der Regel nur "lazy" erstellt und unsichtbare könnten nil sein. Ausserdem verstösst dieses Vorgehen meiner Meinung nach gegen eine saubere Trennung à la MVC.

    Sauberer wäre, in Deinem Datenmodell die Eigenschaft zu ändern, welche in der UI durch das SegmentedControl repräsentiert wird. Dann einfach ein Refresh der UI - ggfs. durch KVO. Fertig.

    Also würde ich beide Schritte umdrehen: Erst die Datenhaltung realisieren - eventuell auch mit einer Dummy-Lösung, dann die darauf basierenden UI-Funktionen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Vielen Dank Mattes für die schnelle Antwort.
    Allerdings kann ich damit erstmal nichts anfangen :rolleyes: ... Ja, ich weiß, ich muss noch sehr viel lernen...

    Ich habe allerdings evtl etwas gefunden, was mir hoffentlich weiterhilft. Sollte es wirklich das sein, was ich suche. Werde ich es für die Nachwelt hier posten.
    Bis dahin, wenn jemand noch eine Idee hat... :whistling:

    LG
    Björn
  • OK, ich weiß nicht ob es sauber ist aber es funktioniert.

    ich habe eine Variable deklariert - keyPressed
    wenn ich nun den Button Weiter antippe, dann wird keyPressed der Weiter gegeben.

    In der func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell....
    frage ich den Wert ab, steht dieser auf weiter, wird der selectedSegmentIndex auf den anderen Wert gesetzt
    Im Button Weiter wird anschließend die Tabelle neugeladen.

    Mir geht es an dieser Stelle nur um eine Berechnung, die ich mit dem SegmentedControl durchführen lasse. Was für mich so auch funktioniert. :thumbsup:

    Wenn ich die Variable anschließend wieder leer mache bzw auf einen anderen Wert, spielen die Schalter bissl "verrückt". :S

    Da habe ich noch eine Baustelle, aber irgendwie wird dies ja zu lösen sein.



    Wenn jemand eine "bessere" Lösung bzw Idee hat, nur her damit. Ich lerne und es macht spaß! 8)

    LG
    Bjönr
  • Schau Dir mal an, für welche Zeilen diese „Berechnung“ durchgeführt wird, wenn die TableView viele beinhaltet und Du scrollst: Die genannte Methode wird nur für sichtbare Zellen aufgerufen und diese werden ausserdem gecacht und wiederverwendet … Prototype eben.

    Apple schrieb:

    Table views do not ask you to create cells for each of the table’s rows. Instead, table views manage cells lazily, asking you only for those cells that are in or near the visible portion of the table.

    Du hast ein konzeptionelles Problem, so kannst Du keine (Hintergrund-) Änderung Deiner Daten durchführen.

    Mach‘ die Veränderungen direkt an den Daten und lass‘ die Oberfläche nur deren Zustand widerspiegeln.

    Mattes

    Edit: Apple-Zitat und -Link für Recherche ergänzt.
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes () aus folgendem Grund: Apple-Zitat und -Link für Recherche ergänzt.

  • glaube, ich hab es mir schwerer gemacht als nötig.


    Bevor ich nun loslege....

    das Label in der Zelle wird ja aus der DB gefüttert. Dann macht es doch auch absolut Sinn, den Status/Index von dem SegmentedControl ebenfalls aus der Datenbank auszulesen.
    Da jedesmal, wenn ich auf weiter drücke der nächste Datensatz aufgerufen wird.

    richtig?