2009-11-07 81 views
0

有沒有簡單的方法來預先加載uitableview中的所有單元格?是否可以預先加載uitableview中的所有單元格?

我需要這樣做以改變是否所有單元格都被檢查。如果我只是使用cellForRowAtIndexPath,並且用戶說取消選中所有單元格,然後檢查一個可見單元格並再次開始滾動,則選中的單元格將被取消選中或者選擇新加載的單元格。

看起來最簡單的方法是預先加載所有單元格,如果可能的話。

謝謝!

回答

3

請重新閱讀答案我wrote here到您以前的類似問題,這解釋了您的問題的一個解決方案。

同樣,你應該考慮保持一個開/關設置數組。無論您想要什麼,您都可以使用NSMutableArrayintBOOL值的C數組。但它絕對聽起來像你需要一個數據模型。您的-tableView:cellForRowAtIndexPath:查找此數組的值。數組中的每個值都以某種方式對應於表中的一行。

如果您只有一個部分,那麼您可以簡單地使用該數組的第i th元素來設置表視圖的第i行的選中狀態。如果您使用NSMutableArray來存儲NSNumber,您可以輕鬆處理大小調整。

如果您有多個部分,請保留一個數組數組。每個頂級數組對應於一個部分。每個內部數組對應於一個部分的行。

如果您使用NSMutableArray來存儲NSMutableArray s的NSNumber s,您可以輕鬆處理調整大小和添加和刪除部分。

方法-tableView:cellForRowAtIndexPath:然後根據數組的值設置帶或不帶檢查標記的單元格。

擁有數據模型可讓您自由地以編程方式執行「全選」和「全部取消」按鈕操作。

例如,當你點擊一個按鈕,「全選」細胞:

  1. 循環遍歷數組,每個值設置爲YES1或任何「上」的標籤你選擇最初。

  2. 調用[tableView reloadData],這是一種返回-tableView:cellForRowAtIndexPath:的方法,它將根據更新數組中值的狀態設置單元格的複選標記狀態。

3

不,你不能這樣做。您似乎認爲單元格代表特定的一段數據,但事實並非如此。當頂部單元格從屏幕上滾動時,通常將其回收並作爲底部單元格引入。因此,一個包含數百個可以滾動的項目的列表可能只有8或9個單元被分配並初始化。

您需要重新考慮應用程序的體系結構。當你「全部取消」時,它不應該改變單元格的可視狀態,它應該改變單元格表示的對象中的某個狀態,然後當你在該索引路徑加載對象的單元格時,應該讀取該狀態並設置適當的複選標記。

您的單元格的視覺狀態的變化應始終響應您的基礎模型的變化。

5

請勿使用單元格作爲數據庫。

你的細胞只是一個狹窄的窗口到你的數據。這些單元格僅顯示底層數據中的一些對象。如果您嘗試預先加載所有單元格以便可以全部選中它們,則UITableView可能會死亡緩慢或爬行緩慢。特別是如果我們正在談論數百個條目。

如果要選擇數據中的所有項目,可以直接調用數據來選擇其對象。然後,您將數據重新加載到您的TableView中,並使用reloadData,如果一切正常,您的單元格將顯示所選狀態。

閱讀UITableView。看看蘋果的樣品。您需要查看從視圖和控制器中分離的數據。

相關問題