刷新 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
实际上会用自己的tableView
、UISearchResultsTableView
覆盖视图。
因此,这个覆盖的 tableView 还可以在您的实现中调用数据源和委托方法,此时来自 tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
的 tableView
参数不再等同于 self.tableView
。
这意味着在过滤期间调用 [tableView reloadData]
实际上是要求 UISearchResultsTableView
重新加载其内容,而不是 self.tableView
,这是您的 viewController
的一个属性。
【讨论】:
哇,是的 uisearchbar 来自 uisearchdisplaycontroller。你的解释很清楚,切中要害!谢谢。 其实我对你的回答很满意,从昨晚开始我的疑惑就彻底解开了。再次感谢您。 很高兴能帮上忙。玩得开心开发!以上是关于刷新 UITableView 的视图的主要内容,如果未能解决你的问题,请参考以下文章
在 cell.detailTextLabel.text 问题的 uitable 视图中更新 gps 位置
将 UITable 中 UITableViewCell 中子视图中对象的 CGRect 转换为相对于 self.view 的 CGRect