📅  最后修改于: 2023-12-03 15:20:48.248000             🧑  作者: Mango
在使用 UITableView 时,选定某一行后没有出现选中状态(如高亮或选中离开),导致用户无法确定已选中的行。
选中状态的显示受到 UITableViewCell 的属性 isSelected
的控制。当用户点击某一行后,该行的 isSelected
属性会被设置为 true,同时 tableView 会调用 tableView(_:didSelectRowAt:)
方法,在该方法中可以添加选中时的交互逻辑。但是如果选中状态没有显示,可能是以下几种原因导致:
selectionStyle
属性。tableView(_:cellForRowAt:)
方法中未正确设置 isSelected
属性。tableView(_:didSelectRowAt:)
方法中未正确处理选中状态。selectionStyle
属性UITableViewCell 的 selectionStyle
属性决定了选中状态的显示方式。常用的属性值有:none
(无选中状态)、gray
(灰色背景,无高亮)和 default
(蓝色背景,有高亮)。在创建 UITableView 时可以通过 IB 或代码设置 selectionStyle
属性。例如:
// 使用代码设置
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath)
cell.selectionStyle = .default // 设置选中状态
return cell
}
// 使用 IB 设置
tableView.cellLayoutMarginsFollowReadableWidth = false
tableView.separatorInset.left = 0
tableView.separatorInset.right = 0
tableView.separatorStyle = .none
tableView.tableFooterView = UIView()
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 44
tableView.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "cellId")
// 在 Storyboard 中设置 UITableViewCell 的 selectionStyle
isSelected
属性在 tableView(_:cellForRowAt:)
方法中设置 UITableViewCell 对象的 isSelected
属性。例如:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath)
cell.isSelected = selectedIndexPath == indexPath // 根据情况设置选中状态
return cell
}
在 tableView(_:didSelectRowAt:)
方法中处理选中状态。如果需要改变 UITableViewCell 的状态,可以在方法中直接修改对应的 UITableViewCell 对象的属性;如果需要在选中状态上添加额外的交互逻辑,可以通过处理 sender 参数来实现。例如:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// 处理选中状态
tableView.cellForRow(at: indexPath)?.isSelected = true
// 处理额外的交互逻辑
let cell = tableView.cellForRow(at: indexPath)
// ...
}
UITableView 的选中状态主要由 UITableViewCell 的 isSelected
属性控制,同时需要正确设置 selectionStyle
属性,并在 tableView(_:didSelectRowAt:)
方法中处理选中状态。通过以上几点,就可以实现 UITableView 的选中状态显示。