【发布时间】:2020-01-02 18:56:11
【问题描述】:
我有一个类似于邮件应用程序的 UI。左侧的表格视图,带有单列项目。选择左侧的其中一项时,右侧会显示有关该项目的详细信息。
当我的应用程序中发生需要重新加载左表视图中的数据的事件时,当前选择会丢失,然后右详细视图和左主视图不同步。
我希望解决这个问题的方法是,当需要重新加载表数据时,我会: 1.保存当前选中的项目 2.重新加载表数据 3. 处理让我知道重新加载何时完成的委托方法或通知。 4. 通过在表中的新项目列表中找到正确的项目来重新选择它。
不幸的是,我找不到任何方法来确定表何时完成重新加载。有没有。任何方法来解决这个问题,或者b。这个问题的更优雅的解决方案?
谢谢。
更新:如果我的问题不清楚,想象一下您在邮件应用程序中并且您选择了一些消息。该摘要单元格在左侧显示为选中状态,消息的详细信息显示在右侧。假设新邮件进来,在表格顶部显示为新单元格。您当前正在查看的消息是如何被保留而不是被取消选择的?
【问题讨论】:
-
你不能在 [yourTableView reloadData] 调用后简单地选择正确的单元格吗?
-
不幸的是没有(我也这么认为..)。 reloadData 仅设置一个位,指示表需要稍后重新加载。它实际上并没有在那个时候重新加载。所以问题是我实际上不知道重新加载何时完成。
-
这对我来说听起来很奇怪,也与 Apple 的文档不一致。无论如何,请注意表格视图只会重新显示那些可见的行。
-
定义一个方法(refreshTable),重新加载表格数据并重新选择单元格。然后将调用推迟到下一个run loop循环:[self.tableView performSelectorOnMainThread:@selector(refreshTable) withObject:nil waitUntilDone:NO];
标签: macos cocoa nstableview