在 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 变量。

好吧,原来是后台任务有问题。在我选择单元格后再次加载单元格,这就是选择不可见的原因。

【问题讨论】:

您想提一下,以编程方式选择后单元格不会突出显示吗? 确保单元格的selectionStyleUITableViewCellSelectionStyleBlue 并且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 中以编程方式隐藏 TextFields?

如何在 Swift 5 中以编程方式在特定屏幕(即主显示器而不是外部显示器)上显示窗口? [苹果系统; Xcode 15]

如何在 Swift 中以编程方式从 UIView 中删除安全区域?

iOS - 在 Swift 3 中以编程方式删除和激活新约束时布局损坏

如何在 Swift 中以编程方式调整 UIButton 中文本的字体大小以适应宽度?

获取 Button 和 Textfield 数据,当它们在 swift 5 中以编程方式添加时