UITableView 的 selectRowAtIndexPath:animated:scrollPosition: 在 iOS 8 中 reloadData 后不起作用
Posted
技术标签:
【中文标题】UITableView 的 selectRowAtIndexPath:animated:scrollPosition: 在 iOS 8 中 reloadData 后不起作用【英文标题】:UITableView's selectRowAtIndexPath:animated:scrollPosition: not working after reloadData in iOS 8 【发布时间】:2015-02-10 19:54:50 【问题描述】:我在tableView:didSelectRowAtIndexPath:
中有以下代码
[tableView reloadData];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
在重新加载表格视图后,它会取消选择用户点击的表格视图单元格(带有动画)。它在 ios 7 及更早版本中运行良好,但在 iOS 8 中不显示动画。
在 iOS 8 中进行了哪些更改导致此问题?在 iOS 8 中实现相同效果的最佳方法是什么?
【问题讨论】:
你在寻找什么效果?您真的需要重新加载还是只更新单元格? 1.为什么选择一行时要重新加载数据? 我调用reloadData
来更新表格(添加或删除行,取决于选择)并在所选行旁边显示一个复选标记。我不确定这是否是满足我需要的最佳方法(在这方面仍然相对较新),但代码在 iOS 7 及更早版本中运行良好。
【参考方案1】:
导致您调用[tableView reloadData]
的周围代码是什么?
根据您在 cellForRowAtIndexPath
和周围方法中执行的处理量,这可能是一项昂贵的操作。
你可以运行:
[tableView beginUpdates];
// Update code here
[tableView endUpdates];
无需重新加载整个 tableView 数据源。
当调用didSelectRowAtIndexPath
时,单元格已被选中。所以应该不需要调用 tableView 的selectRowAtIndexPath
方法。更新单元格后只需调用deselectRowAtIndexPath
即可解决问题
【讨论】:
我调用reloadData
来更新表格(根据选择添加或删除行)并在所选行旁边显示一个复选标记。我想它非常昂贵,我应该以不同的方式做(我在这方面还是比较新的)。但是,该代码在 iOS 7 及更早版本中运行良好。以上是关于UITableView 的 selectRowAtIndexPath:animated:scrollPosition: 在 iOS 8 中 reloadData 后不起作用的主要内容,如果未能解决你的问题,请参考以下文章
水平 UITableView 中的垂直 UITableView
如何与重叠显示的 UITableView 交互另一个 UITableView