2012-06-30 131 views
0

我有一個計時器,它調用下面的代碼來重新加載我的分組的UITableView的第二節中的單元格。它工作得很好,除非我向上滾動屏幕以使第一部分/單元格不可見。一旦它「回彈」到正確的位置,我就會發現應該出現在第0節的文本出現在第1節中,反之亦然。UITableView reloadRowsAtIndexPaths和cellForRowAtIndexPath

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationNone]; 

是否reloadRowsAtIndexPaths或cellForRowAtIndex路徑工作從全(可見或不可見)的細胞的頂部,或者它只是在開始是在屏幕上可見的細胞起作用?換句話說,第0部分是否實際改變,取決於它是否可以在屏幕上顯示?

還有什麼會導致cellForRowAtIndexPath將錯誤的數據加載到單元格中?

+0

正如你所知道的那樣,細胞被回收利用,當你使用回收細胞時,它的內容設置較舊。也許這是你的問題,一定要重置所有的單元格內容,以避免顯示另一個單元格的內容。 – Raspu

+0

@Raspu:你會如何做到這一點? – SparkyNZ

+0

每次必須顯示單元格時,表格視圖會從其委託中調用方法'tableView:cellForRowAtIndexPath:'。在這個方法中,你必須返回一個單元格,爲了避免重載,你使用'dequeueReusableCellWithIdentifier:'來重用一個目前沒有顯示的單元格。確保您始終更改該單元格的標籤文本(如果您使用的是標準單元格,即'cell.textLabel.text')。 – Raspu

回答

1

好吧,我打了一下與你的項目,這裏是我的建議:

正如你所添加的按鈕,電池,記得刪除它,當你不想使用它(當你刷新單元格,基本上你創建一個新單元格,並存儲第二個單元格以便重用,所以如果向下滾動然後向上,您將重用該單元格作爲名稱的單元格)。

if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
[[cell viewWithTag:2] removeFromSuperview]; 

這個工作,你必須在相應的標籤設置爲按鈕:

myButton1.tag = 2; 
    [cell addSubview:myButton1]; 

而且還直接將按鈕添加到細胞,而不是在內容查看(這只是爲我工作,我不知道爲什麼)。

編輯:我上傳了一個固定版本的項目download it

+0

另外,總是使用cell.textLabel.text來設置標籤,cell.text已被棄用。 – Raspu

+0

優秀!非常感謝您的幫助。它已經有一個星期左右的時間了,因爲我已經有機會使用Mac了,但我現在要重新回到它。太好了,謝謝! – SparkyNZ

+0

不客氣! – Raspu

相關問題