3

我有一个类似于邮件应用程序的 UI。左侧的表格视图,带有单列项目。When one of the those items on the left is selected, details about that item are shown on the right.

当我的应用程序中发生需要重新加载左表视图中的数据的事件时,当前选择会丢失,然后右详细视图和左主视图不同步。

我希望解决这个问题的方法是,当需要重新加载表格数据时,我会: 1. 保存当前选定的项目 2. 重新加载表格数据 3. 处理一个委托方法或通知,让我知道何时重新加载已完成。4. 通过在表中的新项目列表中找到正确的项目来重新选择它。

不幸的是,我找不到任何方法来确定表何时完成重新加载。有没有。任何方法来解决这个问题,或者 b。这个问题的更优雅的解决方案?

谢谢。


更新:如果我的问题不清楚,想象您在邮件应用程序中并且您选择了一些消息。该摘要单元格在左侧显示为选中状态,消息的详细信息显示在右侧。假设新邮件进来,在表格顶部显示为新单元格。您当前正在查看的消息是如何保留而不是取消选择的?

4

2 回答 2

3

reloadData有点像大锤。10.7 提供了更好的解决方案。

当您要添加新行时,不要使用 reloadData,而是使用insertRowsAtIndexes:withAnimation:. 当您有要删除的行时,请使用removeRowsAtIndexes:withAnimation:. 而且,当然,如果现有行已更改,则reloadDataForRowIndexes:columnIndexes.

这些应该为您记住选择(至少,iOS 上的等价物可以)。

如果您不能以 10.7 为目标,其他一些建议可能会有所帮助。noteNumberOfRowsChanged也可能有帮助,但我实际上并没有使用它。

于 2012-11-22T00:39:40.280 回答
0

您可以保存选择,tableView(_:shouldSelectRow:)然后在使用创建单元格后立即选择行tableView(_:viewFor:row:)selectRowIndexes(_:byExtendingSelection:)

无论您如何/何时/多少次重新加载表格,它都非常可靠。

于 2020-01-02T10:56:11.120 回答