2010-07-16 54 views
0

我有一個包含分組表格視圖和單元格的Nib文件。單元通過插座連接到UITableViewController。在cellForRowAtIndexPath我只是返回該單元格,我可以在表格視圖中看到一個單元格。但是,當我將表格的行數更改爲2並想要顯示相同的單元格時,我只能看到一個單元格,看起來第二個單元格的目的是在那裏,因爲可見單元格的下角未舍入,但是,它不在那裏。來自Nib文件的靜態單元格未顯示

如果我在nib文件中創建了第二個單元格對象,第二個出口並將它作爲第二行返回,它顯示正常。我的單元具有在IB中指定的標識符。

這是否意味着我不能重複使用多個行的單元格對象?

回答

1

與您需要爲視圖中每個可見按鈕需要一個UIButton實例的方式相同,每個可見行都需要一個單元實例。

管理此問題的常見模式是向tableview查詢不再需要的以前實例化的單元格(dequeueReusableCellWithIdentifier:),然後返回該單元格。如果表視圖沒有任何可重用的單元格,則必須從nib文件中實例化一個新的單元格。

網上有很多這方面的例子,你也可以在SO上找到一些例子,例如this answer

我建議您通讀蘋果TableView Programming Guide,其中還包含section on loading cells from nibs

更新: 嘗試以不同方式解釋TableView和重用單元格。

可以說我們有一個大型畫廊與 舊畫。成千上萬的畫作。 畫廊只有一個展廳, 雖然,它的牆壁只有十個 繪畫。畫廊經理不得不 開關畫現在時,然後當 遊客感到無聊,並希望看到 一些新的畫。

每個顯示的繪畫需要一個 框架。沒有框架,它不能被 放在牆上。 使框架昂貴,並佔用大量的空間。 幀製造商傢伙想要有時間也沒有 錢建立所需的數千幀 。

他發現他想要 幀的所有作品 目前沒有顯示。他只需要 需要十個框架才能顯示當前的 。當畫廊 經理取下一幅畫中, 框架製造商存儲的框架,並在 畫廊經理提出了一個新的 繪畫,並要求框架製造商爲 它的框架,該框架製造商 從返回框架以前的 再次繪畫。

有一天, 需要空間之間的繪畫規則 得到改變,沒有很好的理由。畫廊經理 能夠在展示廳內放置兩張0​​更多圖片。他 從商店 房間挑選兩幅畫,並要求框架製造商 幀。幀製造商沒有備用的 幀,並且需要製作兩個新的 幀。

現在,讓我們說畫廊是一個TableView,所有的繪畫都是行數據。有十個可見的繪畫空間的陳列室是屏幕,有十個可見行的空間。每個可見行都需要一個單元格,就像每個顯示的繪畫都需要一個框架一樣。

最後,你不應該在乎重複使用一個單元來節省資源。這是TableViews的責任。這是TableView的實現細節,需要多少個單元以及它如何使用。該協議定義瞭如何向TableView詢問可重用的單元格,並且文檔聲明您應該這樣做。這應該夠了。演示項目顯示TableView可以管理大量的數據。如果您的項目由於從nib實例化10-20個單元而導致性能下降,那麼您的nib文件可能會遇到一些問題或其他問題。有一些討論,但是,關於performance of loading from nib versus building cells in code。這可能對你很有意思。

+0

我已經通過TableView編程指南並按照指南中介紹的從Nib文件加載的靜態單元格的方式進行操作,除了我想要保存資源並使用單個單元格對象,併爲每行使用不同的內容。您所描述的方式與Apple指南中的不同。所以我知道我該怎麼做來解決它,但我不知道爲什麼我不能重複使用同一個單元。答案不在這裏。 – Pablo 2010-07-16 07:36:33

+0

您無法爲所有單元重複使用完全相同的單元格對象。每個可見單元格需要一個實例。但你不應該在意。讓TableView照顧它。請求一個可重用的單元格,如果它返回零,則需要實例化一個新單元格。如果可以通過爲每一行使用相同的單元來節省資源,那麼在第一次調用之後,出隊方法會返回第一個被實例化的單元格。 – Vegar 2010-07-25 22:31:48

0

我有一些非常奇怪的行爲,聽起來很像你前面描述的。

最終我發現問題在於我剛添加了一個表格視圖單元格到一個包含其他項目(如父表格視圖和控制器)的xib。我必須做的是爲每個表視圖單元格單獨創建一個單獨的xib。我認爲問題在於,從錯誤構建的xib加載表視圖單元格會使問題混淆。

由於Vegar說有很多關於如何做的教程。

相關問題