我目前正在使用Xcode开发应用。在这个应用程序中,我想让用户可以通过多个复选框过滤表视图单元格(对象)的内容[见图1]。
表视图中显示的每个对象都有8个属性,其值 1 , 2 或 3 。过滤器区域中显示的复选框与这8个属性有关。
像:
对象数组:
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")
]
取消选中所有复选框后,所有对象都将显示相同的默认颜色(蓝色)。
但是当选中其中一个复选框时,过滤器需要将具有相关属性的对象的颜色更改为所选复选框,值为 2 或 3 。当值 2 =变为绿色时,当值 3 =变为紫色时。
所以,例如;如果选中checkbox2,则prop2为 2 或 3 的所有对象应具有不同的颜色[见图2]
我做了研究,但无法找到办法让它发挥作用。如果有人可以提供帮助,那就太棒了!
编辑 - 注意:如果用户选择两个复选框,例如1和2,则属性1或2上值为3的对象需要具有紫色,即使它们在其中一个属性上具有值2。所以价值3'重衡'超过2
答案 0 :(得分:0)
我建议可能使用所有复选框的字典。为每个复选框分配唯一的tag
值(0-7)。
let filters: [Int: Bool] = [0: false, 1: false ... 7:0]
当通过fund didSelect(checkbox: UIButton){ self.tableView.reloadData() }
选择一个时,您可以通过设置self.filters[checkbox.tag] = true
来更新相应的过滤器。
然后,在使用cellForRow(at: IndexPath)
为单元格指定颜色之前,通过迭代所有过滤器并检查它们是否为true来过滤tableView数据项。