点击时如何在静态UITableView中更新UILabel?



我创建了一个iOS应用程序(XCode 9,Swift 4),唯一的视图是设置为"静态单元格"的表视图。此表的视图控制器连接到 UITableViewController 的自定义子类,我在下面包含其代码。该表有一个部分,该部分有一行。此行内是一个标签,其文本最初为"标签",标签连接到我的自定义视图控制器中的 IBOutlet。这是故事板的样子,适合更具视觉意识的人。

我的自定义表视图控制器:

import UIKit
class MyTableViewController: UITableViewController {
@IBOutlet weak var label: UILabel!
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.label.text = "changed"
print("cell clicked")
}
}

现在,当点击带有标签的单元格时,会打印"单击单元格",但文本不会更改。再次点击单元格时,将再次打印"单击单元格",单元格变为选中状态,并且标签的文本确实变为"已更改"。

理想情况下,当点击标签所在的单元格时,标签会立即将其文本更改为"已更改",但它没有,我也不知道为什么。我认为这可能与标签没有更新/重绘有关,即使它的文本正在更改,因为当我单击标签然后滚动视图时,标签的文本在我开始滚动时立即变为"更改"。我尝试用DispatchQueue.main.async {}包裹self.label.text = changed,看看是否有任何变化,但没有。

为了上下文,这是我在这里提出的一个问题的简化案例,我将问题(据我所知)归结为这个简单的案例。有人对我能做什么有任何想法吗?非常感谢!!!

如果要在didSelect上更新单元格的任何属性,首先需要获取对该单元格的引用,然后更新其属性:

let cell = tableView.cellForRow(at: indexPath)
cell?.textLabel?.text = "New value"
cell?.detailTextLabel?.text = "Some other value"

你在这里不需要任何IBOutlet。 如果您使用的是自定义单元格,则可以在UITableViewCell子类中包含IBOutlet,然后可以获取单元格引用(如上所述),并可以修改任何自定义单元格属性。

最新更新