同一个tableView中的单个和多个选择

时间:2017-02-20 06:16:06

标签: ios swift uitableview

我有一个tableView,它有两个不同的部分,一个用于单个选择,另一个用于多个选择。我还为同一个构建了两个不同的自定义单元格。我能够获得多个选择权,但不是单一选择。

我正在使用tableView Cell为单个和多个Selection提供的覆盖setSelected

override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        if selected {
            //make label red
            }
        } else {
            //make label white
        }

    }

然而,我面临的问题是,当我点击multipleSelection部分的单元格时,我的singleSelectionCell的setSelected ovveride被调用,它将标签标记为白色。如果已经在singleSelection中选择了一个单元格,我需要保持这种方式。

我看了这个答案,但我不知道该怎么做。 https://stackoverflow.com/a/32857181/4863339

有人可以帮助我纠正这个问题吗?

1 个答案:

答案 0 :(得分:1)

执行您想要的操作,您需要维护单元格的选择状态,对于单个选择,Section声明一个类型为IndexPath?的实例属性,对于多个选择部分,声明一个类型为{{1}的实例属性}。之后,在[IndexPath]方法中比较此属性,并在cellForRowAt方法中更改其值。

编辑:使用自定义对象,您可以尝试这种方式,使用sectionItem类创建一个Bool类型的属性didSelectRowAt,并使用它来选择多个或单个项目

所以你的课应该是这样的。

selected

现在class Section { var isMultiple: Bool var title: String var items: [Item] init(isMultiple: Bool, title: String, items: [Item]) { self.isMultiple = isMultiple self.title = title self.items = items } } class Item { var id: Int var name: String //To maintain selected state var selected: Bool = false init(id: Int, name: String) { self.id = id self.name = name } } cellForRowAt应该是这样的。

didSelectRowAt