2010-08-15 47 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