使用从 Storyboard 定义的自定义 UITableViewController 和原型单元进行随机 UI 更新

Posted

技术标签:

【中文标题】使用从 Storyboard 定义的自定义 UITableViewController 和原型单元进行随机 UI 更新【英文标题】:Random UI updating with custom UITableViewController and Prototype cells defined from Storyboard 【发布时间】:2012-02-08 14:58:04 【问题描述】:

我创建了一个UITableViewController 的子类,用作我故事板中视图的自定义类。该视图有许多定义为原型单元的部分/行,这些单元被实例化并按预期显示。大多数UITableView 委托方法只是调用super 的方法来处理部分数量、行等。

我已经缓存了用于更新-viewDidLoad 上的单元格的内容,然后是一个异步操作,它从我的服务器重新加载内容并随后重新绑定数据(在主线程上,-performSelectorOnMainThread::)。正是在这一点上,看似任意地,一些单元格内容(主要是标签)将被清除数据,并且在 10-15 秒之间不会更新为新数据。此时,刚刚显示的内容或有时在表格视图中滚动的内容都会导致内容出现。

我知道选择器正在被调用,并且在主线程上,UI 元素的文本属性正在设置,但随机它们只是......不要更新。我尝试在 tableView、控制器视图上添加 -setNeedsDisplay 和在 tableView 上添加 -reloadData(尽管最后一个似乎没有必要,因为它们是原型单元格)都无济于事。

有人遇到过这个吗?

【问题讨论】:

我找到了一个“有问题的”修复 - 将我的 UILabel 更改为 UITextFields 修复了它。我没有将此作为修复程序发布,因为我仍在试图找出为什么 UILabel 没有以类似方式更新。 【参考方案1】:

我不确定这是否是由线程方面引起的,或者 tableView 是如何处理的。如果是 tableView,请查看此 post,因为在我正确处理动态原型 tvCells 之前,我的应用正在经历的消失数据有一些相似之处。

【讨论】:

【参考方案2】:

我的评论确实解决了我的问题。 UILabel 似乎在修改时不会更新,而是在内部决定何时重绘它们 - 无论您是否尝试使用 display 或 setNeedsDisplay 强制它。

解决方案:使用UITextView 而不是UILabel

【讨论】:

以上是关于使用从 Storyboard 定义的自定义 UITableViewController 和原型单元进行随机 UI 更新的主要内容,如果未能解决你的问题,请参考以下文章

使用带有原型单元的自定义 UITableViewCell

无法更改 Storyboard 中的自定义 UICollectionViewCell

在 Storyboard 中设计的自定义 UITableViewCell 中的自定义 UIView

不使用 Storyboard segues 的自定义视图转换 (Swift)

StoryBoard 中的自定义 UITableViewCell AutoLayout 右对齐

如何在 Storyboard 控制器中重用定义为原型单元的自定义 UITableViewCell