在 Swift 中以编程方式突出显示 UITableViewCell
Posted
技术标签:
【中文标题】在 Swift 中以编程方式突出显示 UITableViewCell【英文标题】:Programmatically highlighting UITableViewCell in Swift 【发布时间】:2018-03-26 20:19:23 【问题描述】:如何以编程方式突出显示表格视图单元格?
我正在使用:
tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
tableView.delegate?.tableView!(self.ordersTableView, didSelectRowAt: indexPath)
我遇到的问题是单元格正在被选中(我的didSelectRowAt
中指定的所有操作都正在执行)但单元格现在突出显示。它似乎没有被选中。
我想要实现的就像 iPad 上的设置应用程序。您启动应用程序并看到“常规”单元格已被选中并突出显示。
用户触摸时,单元格会正确突出显示。
我什至尝试在 UITableViewCell 的子类中覆盖 isSelected
变量。
好吧,原来是后台任务有问题。在我选择单元格后再次加载单元格,这就是选择不可见的原因。
【问题讨论】:
您想提一下,以编程方式选择后单元格不会突出显示吗? 确保单元格的selectionStyle
是UITableViewCellSelectionStyleBlue
并且tableView 的allowsSelection
设置为YES
他们是。没有任何改变。
【参考方案1】:
注意:您的问题标题显示,您有一个带有单元格突出显示的查询,而您的问题描述显示,您的单元格选择有问题。两者都是不同的事件。
这是一个答案,如何在 tableview 行(单元格)选择上管理(设置颜色):
// make sure your tableview row selection is enabled
yourTableViewInstance.allowsSelection = true
// handle highlighted background in data source method also
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "textview") as! YourTableViewCell
cell.contentView.backgroundColor = cell.isSelected ? UIColor.red : UIColor.gray
return cell
// didSelectRowAtIndexPath - change background color
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if let cell = tableView.cellForRow(at: indexPath) as? YourTableViewCell
cell.contentView.backgroundColor = UIColor.red
// didDeselectRowAtIndexPath - change background color
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
if let cell = tableView.cellForRow(at: indexPath) as? YourTableViewCell
cell.contentView.backgroundColor = UIColor.gray
【讨论】:
【参考方案2】:试试这个:-
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
var selectedCell:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
selectedCell.contentView.backgroundColor = UIColor.redColor()
【讨论】:
【参考方案3】:这是处理单元格背景选择的另一个选项
class YourTableViewCell: UITableViewCell
// override cell selection
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
if self.selectedBackgroundView == nil
let bgView = UIView()
self.selectedBackgroundView = bgView
self.selectedBackgroundView?.backgroundColor = selected ? UIColor.red : UIColor.gray
// enable row/cell selection
yourTableViewInstance.allowsSelection = true
// handle highlighted background in data source method also
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "textview") as! YourTableViewCell
if self.selectedBackgroundView == nil
let bgView = UIView()
self.selectedBackgroundView = bgView
self.selectedBackgroundView?.backgroundColor = selected ? UIColor.red : UIColor.gray
return cell
【讨论】:
以上是关于在 Swift 中以编程方式突出显示 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 5 中以编程方式在特定屏幕(即主显示器而不是外部显示器)上显示窗口? [苹果系统; Xcode 15]
如何在 Swift 中以编程方式从 UIView 中删除安全区域?
iOS - 在 Swift 3 中以编程方式删除和激活新约束时布局损坏