我正在使用我的应用程序,当点击1个单元格时,其背景应该变成蓝色,如果点击其他单元格,前一个单元格将重置其背景颜色。这是我的setSelected函数
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
if selected {
borderView.applyBorder(color: .darkGray, width: 1)
borderView.backgroundColor = .blue
} else {
borderView.applyBorder(color: .lightGray, width: 1.0)
borderView.backgroundColor = .white
}
}
字符串
但是当我测试它的时候,单元格的背景是蓝色的,如果我点击其他单元格,它们不会重置。
2条答案
按热度按时间epggiuax1#
抛弃现有的代码。你不能用基于单元格的方式来做这件事;你必须用基于行的方式来做,这意味着你必须通过表内容所依赖的数据模型来实现它。
1.在表视图的委托中,实现表视图委托方法
tableView(_:didSelectRowAt:)
。在该方法中,更改表视图的 model 中的某些内容,使每行都知道它现在是否被选中,并调用表视图的reloadData
,以便它将生成新单元格。1.在表视图的数据源
tableView(_:cellForRowAt:)
中,根据该行的 model 中的信息,配置所请求单元格的外观。shyt4zoc2#
在这种情况下,它是一个单一的选择表。我没有看到你的代码设置表视图,所以我想你使用了一个不正确的属性。
字符串
然后它应该正常工作。并获得选定的行用于其他目的。
型
但是这种方法有一个缺点。当你想默认选择一个单元格时,也就是说,在
viewDidLoad
上。而不是像@matt在他的回答中所说的那样,只将模型内部的selected
属性设置为true。你必须通过方法tableView.selectRow
进行设置。这意味着你让table view处理选择状态,而你的模型只是用来显示信息。x1c 0d1x的数据