如何在 UITableView 中引用 UITableViewCell

Posted

技术标签:

【中文标题】如何在 UITableView 中引用 UITableViewCell【英文标题】:How do I reference a UITableViewCell in a UITableView 【发布时间】:2017-05-24 10:07:15 【问题描述】:

表格视图和单元格已创建并填充了标签和滑块。当值更改时,滑块上有一个 IBAction。

如何将该值返回到单元格中的标签中?

我在表格视图中链接了一个 IBOutlet。

@IBAction func slideChange(_ sender: UISlider) 

    let currentValue = sender.value    // gets slider's value
    let row = sender.tag               // gets slider's row in table

    myTableView.cell.myLabel.text = sender.value  // Here i need to show updated value


    print("Slider in row \(row) has a value of \(currentValue)")  // works

【问题讨论】:

您需要重新加载表格视图或特定单元格,然后在 cellforRowAtIndexpath 方法中尝试将该值设置为该单元格。 处理单元格中的滑块并使用委托或闭包,请参阅***.com/questions/28659845/… 【参考方案1】:

试试这个:

@IBAction func slideChange(_ sender: UISlider)
     let cell: UITableViewCell? = (sender.superview?.superview as? UITableViewCell)  // track cell using your view hierarchy and this your cell
     cell.myLabel.text = sender.value

  let rootViewPoint: CGPoint? = sender.superview?.convert(sender.center, to: tblView)
   var indexPath: IndexPath? = tblView?.indexPathForRow(at: rootViewPoint!)
   let cell: UITableViewCell? = tblView?.cellForRow(at: indexPath!)

【讨论】:

@Sean 你试过这个答案吗? 是的。我对超级视图计数有误。我需要将 UITableViewCell 类型更改为 PersonTableCell (因为我有我的班级)并删除它上面的可选项。我需要强制打开整个单元格。作品 有时答案仅用于建议。您必须对答案进行一些更改才能获得所需的输出。 那为什么要投反对票.. 你可以询问备用观看次数。 我没有投反对票。我什至不能用我的声誉得分投票。 :(我投了赞成票!【参考方案2】:

获取对表格视图单元格的引用

let cell = tableView.cellForRow(at: IndexPath(row: sender.tag, section: 0))

更新其标签

cell?.myLabel.text = sender.value

注意:当单元格不可见时,此方法返回 nil。在您的情况下,这不是问题。

【讨论】:

太棒了。当你知道怎么做的时候就这么简单。感谢您的快速响应。 我认为您缺少的是更新数据模型,以便 cellForItem 方法在滚动时使用更新的值配置单元格。

以上是关于如何在 UITableView 中引用 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

UITableview如何一次只显示一个单元格

如何增加UITableView分隔符高度?

如何在 UITableViewCell 中添加多行文本字段?

如何从应用程序委托访问 uitabbarcontroller 内的 uinavigationcontroller 内的 uitableview?

UITableView的contentSize

编辑第一个 UITextField 时,如何将 UITableView 滚动到第二个 UITextField?