ios - Swift - 在 tableView.selectRow 中更改背景颜色
问题描述
我有一个具有所有正确行为的 tableView,但我试图将选定行的背景颜色从默认灰色更改为绿色,并且 tableView 表现得很奇怪。
默认颜色的当前行为:页面加载并且第一个表格部分的第一行被选为默认值(灰色背景)。如果用户单击另一行,则取消选择第一行,单击的行将获得灰色背景。这段代码:
private var scrolledToItitialSelection = false
didSet {
tableView.reloadData()
if let selected = self.model.selectedRow { // selectedRow returns an indexPath
tableView.selectRow(at: selected, animated: true, scrollPosition: scrolledToInitialSelection ? .none : .middle
scrolledToItitialSelection = true
}
}
我试图实现完全相同的行为,只是使用不同的背景颜色。但是使用下面的代码,tableView 加载并按预期选择了第一个表格部分的第一行,但第二部分的第二行也是如此。此外,如果我单击默认选择的行下面的行,现在我有 4 个选定的行:第一部分中的两个,第二个中的两个。
private var scrolledToItitialSelection = false
didSet {
tableView.reloadData()
if let selected = self.model.selectedRow { // selectedRow returns an indexPath
tableView.selectRow(at: selected, animated: true, scrollPosition: scrolledToInitialSelection ? .none : .middle
let selectedCell:UITableViewCell = tableView.cellForRow(at: selected)!
selectedCell.contentView.backgroundColor = .green
selectedCell.accessoryView.backgroundColor = .green
scrolledToItitialSelection = true
}
}
解决方案
a 的选择颜色UITableViewCell
是单元格子视图的背景颜色。
你可以试试这个:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
/// dequeueReusableCellWithIdentifier...
let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.green
cell.selectedBackgroundView = backgroundColorView
}
推荐阅读
- drake - 如何理解连续状态向量?
- php - PHP - 从标题中获取请求行
- node.js - 通过 nodemailer 在 Alexa Skill Fact 中发送电子邮件
- rest - 如何在 spring-boot-starter-data-rest 中测试 @RepositoryRestResource 自动生成的端点?
- javascript - 如何从 JS 对象中获取前 5 个属性?
- javascript - 在将对象推送到数组时,对象中一个特定变量的所有值都变得相同
- javascript - MediaRecorder Web API 在流式传输 60FPS 流时崩溃
- c# - SaveFileDialog AddExtension 无法按预期工作
- java-8 - 关闭 CDT 中自定义关键字的语法错误标记
- java - Lambda S3Event 的 AWS 开发工具包 V2 类是什么?