2017-05-26 76 views
1

所以我有大約150ish排在cellForRowAt方法,我有以下代碼的UITableView索引路徑行爲舉止怪異

cell.monthLabel.text = String(indexPath.row) 

if indexPath.row == 0{ 
    cell.backgroundColor = .blue 
} 

表視圖的問題是,爲什麼在指數路徑9,18,27等有藍色的背景顏色。

enter image description here

回答

2

單元格被重用,您必須將所有UI元素設置爲已定義的狀態。

所以,如果你設置了backgroundColor藍色行0

if indexPath.row == 0 { 
    cell.backgroundColor = .blue 
} 

你必須(重新)將其設置爲默認的顏色在其他情況下

else { 
    cell.backgroundColor = .white 
} 
+1

謝謝你解決了我的問題,但出於好奇你會碰巧知道爲什麼它是每9個細胞,而不是每個細胞是藍色的? –

+3

您在屏幕上添加了7個單元格,並在用戶滾動時添加了2個 - 一個位於頂部,另一個位於底部。 – vadian

1

當你不顯示tableView(_:cellForRowAt:)方法的所有代碼只是假設你離隊細胞(該方法dequeueReusableCell(withIdentifier:)和已經註冊你的類的重用(如果你使用自定義類)。

使用這種方法可以重用單元格的視圖,這意味着如果您不重新設置屬性(例如背景顏色),它將只使用舊單元格的一種形式。在你的代碼中包含一個else,並在那裏設置背景顏色變白。

如果您繼承了UITableViewCell類,那麼您可以使用prepareForReuse()函數進行清理,例如,重置背景顏色。

+0

很好的解釋 – Maddy

0

的UITableView不設置每個項目上的數據一次,它會根據活動繼續在所有可見項目上一次又一次地設置數據。我不能給你這種行爲的明確理由,但我可以給你解決方案。無論何時您在某些條件下設置某些項目的數據時,請始終使用「Else」語句。所以對於這個特殊的問題,你只需要在你的「If」條件下添加「Else」塊並在「Else」塊中設置項目的白色背景。