我的UI看起来与邮件应用程序类似。左侧的表格视图,其中包含一列项目。当选择左侧的其中一个项目时,右侧会显示有关该项目的详细信息。
当我的应用程序中发生某些需要重新加载左表视图中的数据的事件时,当前选择将丢失,然后右侧详细视图和左侧主视图不同步。
我希望解决这个问题的方法是,当需要重新加载表数据时,我会: 1.保存当前所选项目 2.重新加载表数据 3.处理委托方法或通知,让我知道重新加载的时间。 4.通过在表格中的新项目列表中找到它来重新选择正确的项目。
不幸的是我无法找到任何方法来确定表何时重新加载。有没有。任何解决这个问题的方法,或b。这个问题更优雅的解决方案?
感谢。
更新:如果我的问题不清楚,想象一下你在邮件应用程序中并且选择了一些消息。该摘要单元格在左侧显示为选中,消息的详细信息显示在右侧。假设有新邮件出现在表格顶部的新单元格中。您当前正在查看的邮件如何保留,而不是取消选择?
答案 0 :(得分:3)
reloadData
是一把大锤。 10.7提供了更好的解决方案。
当您要添加新行时,请使用insertRowsAtIndexes:withAnimation:
,而不是使用reloadData。如果要删除行,请使用removeRowsAtIndexes:withAnimation:
。当然,如果现有行已更改,则为reloadDataForRowIndexes:columnIndexes
。
这些应该记住你的选择(至少,iOS上的等价物)。
如果您无法定位10.7,其他一些建议可能会有所帮助。 noteNumberOfRowsChanged
也可能有用,但我实际上并未使用它。
答案 1 :(得分:0)
您可以在tableView(_:shouldSelectRow:)
上保存选择,然后在tableView(_:viewFor:row:)
中使用selectRowIndexes(_:byExtendingSelection:)
在创建单元格后立即选择行。
无论您何时,何时/多少次重新加载表格,这都是非常可靠的。