2014-09-30 50 views
0

我有一個自定義的UITableViewCell,它具有從服務器獲得的數據。當數據進來時,我設置了單元格的重用標識符。一切工作正常,直到我執行下拉刷新並獲取新的/更新的數據。來自服務器的標識符是相同的,但是數據可能不同(這是在這種情況下的預期結果)。發生這種情況時,我需要重新創建單元格,並保持相同的重用標識符。我知道不設置reuseIdentifier是解決這個問題的方法之一,但這是一個非常糟糕的主意,會傷害到性能。Objective-c從UITableViewCell中刪除reuseIdentifier

我已經看過很多關於reuseIdentifier的問題,但是他們沒有一個能夠解答我的問題。

謝謝你的任何洞察力!

+0

我不認爲你明白它應該如何工作。 reuseIdentifier標識一個初始化單元格的特定方法(例如,設置背景顏色,添加標籤等),這樣,如果您使用該標識符將其出隊,則不需要重新初始化。 – 2014-09-30 22:08:42

+1

對於一個簡單的表格,所有行的格式都是相同的,所有內容都使用一個reuseIdentifier值。 – 2014-09-30 22:15:32

+0

我知道reuseIdentifier標識了一種識別單元的特定方式。就我而言,每個單元格都是根據我從服務器獲得的信息唯一創建的。所以當我滾動到底部,並且備份時,我確實得到了正確的單元格,因爲設置了reuseIdentifier,並且我不需要重新初始化它。當我下拉刷新時,單元格「x」的數據可能會改變,並且我的單元格的設置方式,我需要重新創建單元格。 – 2014-09-30 22:40:59

回答

2

沒有必要清除reuseIdentifier。只需在設置新數據後重新加載表格視圖。所有可見的單元格將被重新加載。使用相同的reuseIdentifier是好的。只要您的cellForRowAtIndexPath方法正在使用新數據來填充每個單元格,就會得到期望的結果。

更新 - mkral的評論是一個很好的說明。 reuseIdentifier表示單元格的類型,而不是數據。因此,除非服務器的標識符影響所顯示的單元格類型,否則重用標識符應該與服務器的標識符完全無關。

+0

爲了補充說明,'reuseIdentifier'意在識別不同類型的單元。因此,如果只有一種類型的單元格,它將檢查是否可以重複使用具有相同標識符且不再使用的另一個單元格(屏幕外),因此它不會爲1000條記錄創建1000個UITableViewCell實例。它只會創建+/-可用於tableview的單元格的數量,並在滾動時重用不可見的單元格。 – mkral 2014-09-30 22:07:17

+0

我擁有的每個單元格都是基於服務器信息創建的,當我初始化單元格時,I使用來自服務器的數據初始化它。重新加載數據被調用時,表視圖使單元出隊,並且更改不顯示,因爲init不會被調用。 – 2014-09-30 22:45:28

+1

你需要用你的'cellForRowAtIndexPath'方法更新你的問題。順便說一句 - 數據不應該傳遞給單元格的'init ...'方法。細胞得到重用。您需要能夠在調用init之後更新單元的數據。 – rmaddy 2014-09-30 22:53:38