2016-11-22 7 views
1

Ich entwickle gerade eine App in Xcode. Innerhalb dieser App möchte ich dem Benutzer die Möglichkeit geben, den Inhalt von Table View Cells (Objekten) durch mehrere Checkboxen zu filtern [siehe Bild 1]. oderXCODE-Filtertabelle Zellen mit mehreren Kontrollkästchen anzeigen

Picture 1

Jedes Objekt, das ist in der Tabellenansicht gezeigt hat 8-Eigenschaften, die den Wert 1 haben. Die Kontrollkästchen im Filterbereich stehen in Beziehung zu diesen 8 Eigenschaften.

Like:

  • Checkbox1 = PROP1
  • Checkbox2 = prop2
  • Checkbox3 = prop3
  • etc ..

Objekte Arrays:

var objects:[Object] = [ 
Object(name: "Lorem Ipsum", prop1: "3", prop2: "1", prop3: "1", prop4: "1", prop5: "1", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "1", prop2: "1", prop3: "1", prop4: "3", prop5: "1", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "1", prop2: "2", prop3: "2", prop4: "2", prop5: "2", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "2", prop2: "3", prop3: "3", prop4: "1", prop5: "3", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "1", prop2: "3", prop3: "1", prop4: "2", prop5: "2", prop6: "3", prop7: "2", prop8: "1"), 
Object(name: "Lorem Ipsum", prop1: "2", prop2: "3", prop3: "1", prop4: "1", prop5: "1", prop6: "1", prop7: "3", prop8: "2") 
] 

Wenn alle Kontrollkästchen deaktiviert sind, zeigen alle Objekte die gleiche Standardfarbe (blau).

Aber wenn einer des Kontrollkästchen aktiviert ist, muss die Filter die Farbe der Objekte ändern, die die entsprechende Eigenschaft auf das ausgewählte Kontrollkästchen haben, als Wert oder . Wenn der Wert ist 2 = Wechsel zur grünen Farbe, und wenn der Wert ist 3 = zu lila Farbe ändern.

Also zum Beispiel; wenn checkbox2 ausgewählt ist, werden alle Objekte mit prop2 als oder sollte eine andere Farbe haben [siehe Bild 2]

Picture 2 (checkbox2 selected)

ich forschte, konnte aber nicht einen Weg, es zu tun finden und Bring es zum Laufen. Wenn jemand helfen könnte, wäre das erstaunlich!

EDIT-NOTE: Wenn der Benutzer zwei Kontrollkästchen auswählt, beispielsweise 1 und 2, müssen die Objekte mit dem Wert 3 auf Eigenschaft 1 oder 2 die Farbe Lila haben, auch wenn sie in einer dieser Eigenschaften den Wert 2 haben . Also Wert 3 "wiegt" mehr als 2

+0

Können Sie die aktuelle Zelle, in der die Kontrollkästchen angezeigt werden, nicht einfach neu laden? 'Tabellenansicht.reloadRows (at: [currentIndexPath], mit: .automatic) ' – Nathaniel

+0

Ja, das wäre möglich, aber dann muss ich viele Arrays richtig rendern? Und wenn der Benutzer mehrere Kontrollkästchen auswählt. – Maarten

+0

Wenn ich Ihre Frage richtig verstanden habe, denke ich, dass Sie keine andere Wahl haben, als die TabelleView-Daten jedes Mal neu zu laden, wenn eine Checkbox ausgewählt/abgewählt ist, es sei denn, Sie möchten jeder Zelle Beobachter hinzufügen ... was übertrieben erscheint .... Wenn Sie eine glattere Animation für die Aktualisierung wünschen, verwenden Sie 'tableView.ReloadSections (IndexSet (integer: 0), mit: .automatic)' und wählen Sie die gewünschte Animation aus. – Nathaniel

Antwort

0

Ich würde vorschlagen, vielleicht ein Wörterbuch für alle Kontrollkästchen verwenden. Weisen Sie jedem Kontrollkästchen einen eindeutigen tag Wert zu (0-7).

let filters: [Int: Bool] = [0: false, 1: false ... 7:0]

Wenn man über eine fund didSelect(checkbox: UIButton){ self.tableView.reloadData() } ausgewählt ist, würden Sie den entsprechenden Filter aktualisieren, indem self.filters[checkbox.tag] = true Einstellung.

Anschließend sollten Ihre TableView-Datenelemente gefiltert werden, indem Sie alle Filter durchlaufen und prüfen, ob sie wahr/falsch sind, bevor Sie der Zelle mithilfe von cellForRow(at: IndexPath) eine Farbe zuweisen.

+0

Vielen Dank, ich werde es versuchen – Maarten

Verwandte Themen