2010-08-15 151 views
1

我正在开发一个iOS应用程序,并且在决定如何解决问题时遇到了一些问题。iOS - 双列表布局

我使用两个UITableViewControllers来显示相同​​数据的不同视图。一个是主列表,另一个只包含标记为“最爱”的项目。此外,这些项目是可变高度,所以我使用“heightForRowAtIndexPath”来指示每个项目的高度。问题在于速度,当我从一个视图切换到另一个视图时,需要更新以显示其他视图(标记为“最喜欢/不喜欢”)所做的更改。

溶液#1

重新装入数据中的每个表格视图变得可见的时间。这样做效果不好,因为尽管数据是使用延迟加载显示的,但在加载ANY数据之前会为每个项目调用“heightForRowAtIndexPath”,并且速度很慢。在我的iPhone 4上,即使高度值被缓存(瓶颈是应用高度,而不是检索它),大约300个项目的列表也需要大约4秒钟才能加载。

 

溶液#2

手动操纵表时更改。我没有试过这个,但它可能是越野车。你的想法?

 

解决方案#3

使用的通知类型的系统更新的其他表通知可能当前加载项。我没有尝试过,因为它似乎在顶部,可能根本无法工作。

有谁知道一个简单的方法来显示相同​​数据的两个视图?

回答

1

您可以使用reloadRowsAtIndexPaths:withRowAnimation重新加载n行。我从来没有这样做,但我认为它在那里,因为它更快,所以你可能想尝试一下。

关于heightForRow:thingy,我记得在Apple的文档中看到这个函数确实是性能的杀手。也许你可以采取行的最大高度,并在UITableView.rowHeight中设置?

+0

确实。 - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)动画 – 2010-08-15 09:46:46

+0

是的heightForRowAtIndexPath非常慢,但我不认为应用程序看起来是正确的大小相同的行。我将考虑加速它的唯一选择是序列化表视图并在NIB加载时将其反序列化。不知道它是否可能,但它的想法。 – Nippysaurus 2010-08-16 02:35:54

+0

@Nippysaurus:对已故的评论抱歉。我不知道任何其他方法来加速这一点。 (de)序列化tableview是什么意思? – Nick 2010-08-21 00:30:53