刷新 UITableView 的视图

Posted

技术标签:

【中文标题】刷新 UITableView 的视图【英文标题】:Refreshing the view of UITableView 【发布时间】:2014-04-14 15:20:45 【问题描述】:

我了解 Xcode 5.0 表格视图的单元格可重用性的概念。但是,我有一个非常奇怪的观察结果,我不明白,希望你们中的任何人都可以在这里启发我。谢谢。

我已经实现了一个带有搜索栏实用程序的表格视图(就在表格视图的顶部)。在每个自定义单元格(原型单元格)下,每当用户点击它时,都会标有一个复选标记(UITableViewCellAccessoryCheckmark)。单元格数超过10个。

观察: - 不使用任何搜索,标记和取消标记单元格按预期工作。单元格及其复选标记会立即更新。 - 在进行搜索时,根据给出的结果,标记和取消标记单元格也可以正常工作。

[问题] 奇怪的问题来了:取消搜索时,已经标记的单元格(在搜索期间标记)不会在表格视图中自行刷新,除非执行向上或向下滚动!

因此,我在 tableview:didSelectRowAtIndexPath: 方法的末尾写了 [tableview reload]。显然,它不会为我刷新 tableview。无需进一步更改任何其他代码,只需将 [tableview reload] 修改为 [self.tableview reload] 即可!

为什么只加了“self”。能够使表格单元格立即刷新吗? 我一直认为方法 (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 的第一个参数 tableView 等于 self.tableview .显然,我对这种情况的解释是错误的。

谢谢。很抱歉我的帖子太长了。

【问题讨论】:

【参考方案1】:

我的猜测是这个UISearchBar 来自UISearchDisplayController。对吗?

如果属实,这是一种常见的误解,但很容易理解。

当过滤您的UITableView 条目并显示结果时,UISearchDisplayController 实际上会用自己的tableViewUISearchResultsTableView 覆盖视图。

因此,这个覆盖的 tableView 还可以在您的实现中调用数据源和委托方法,此时来自 tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathtableView 参数不再等同于 self.tableView

这意味着在过滤期间调用 [tableView reloadData] 实际上是要求 UISearchResultsTableView 重新加载其内容,而不是 self.tableView,这是您的 viewController 的一个属性。

【讨论】:

哇,是的 uisearchbar 来自 uisearchdisplaycontroller。你的解释很清楚,切中要害!谢谢。 其实我对你的回答很满意,从昨晚开始我的疑惑就彻底解开了。再次感谢您。 很高兴能帮上忙。玩得开心开发!

以上是关于刷新 UITableView 的视图的主要内容,如果未能解决你的问题,请参考以下文章

UITable 视图中的单元格队列大小

在 cell.detailTextLabel.text 问题的 uitable 视图中更新 gps 位置

将 UITable 中 UITableViewCell 中子视图中对象的 CGRect 转换为相对于 self.view 的 CGRect

如何以编程方式在 UITableView 中添加视图?

UIPageControl 与 UITableView

弹出视图控制器后 UITableview 丢失参考