我有一个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
有人可以帮助我纠正这个问题吗?答案 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