gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:41:38 25 4
gpt4 key购买 nike

我创建了一个 iOS 应用程序(XCode 9、Swift 4),唯一的 View 是设置为“静态单元格”的表格 View 。该表的 View Controller 连接到 UITableViewController 的自定义子类,我将其代码包含在下面。该表有一个部分,该部分有一行。该行内有一个标签,其文本最初为“Label”,并且该标签连接到我的自定义 View Controller 中的 IBOutlet。 Here is what the storyboard looks like, for the more visually minded.

我的自定义 TableView Controller :

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")
}
}

现在,当点击带有标签的单元格时,会打印“已单击单元格”,但文本不会更改。当再次点击单元格时,会再次打印“cell clicked”,单元格将被选中,并且标签的文本将变为“changed”。

理想情况下,当点击标签所在的单元格时,标签会立即将其文本更改为“已更改”,但事实并非如此,我也不明白为什么。我认为这可能与标签未更新/重绘有关,即使其文本正在更改,因为当我单击标签然后 ScrollView 时,标签的文本在我开始滚动时立即“更改”。我尝试用 DispatchQueue.main.async {} 包装 self.label.text =changed 以查看是否会发生任何变化,但事实并非如此。

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

最佳答案

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

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

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

关于ios - 如何在点击时更新静态 UITableView 中的 UILabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56486461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com