所以我有大約150ish排在cellForRowAt
方法,我有以下代碼的UITableView索引路徑行爲舉止怪異
cell.monthLabel.text = String(indexPath.row)
if indexPath.row == 0{
cell.backgroundColor = .blue
}
表視圖的問題是,爲什麼在指數路徑9,18,27等有藍色的背景顏色。
所以我有大約150ish排在cellForRowAt
方法,我有以下代碼的UITableView索引路徑行爲舉止怪異
cell.monthLabel.text = String(indexPath.row)
if indexPath.row == 0{
cell.backgroundColor = .blue
}
表視圖的問題是,爲什麼在指數路徑9,18,27等有藍色的背景顏色。
單元格被重用,您必須將所有UI元素設置爲已定義的狀態。
所以,如果你設置了backgroundColor
藍色行0
if indexPath.row == 0 {
cell.backgroundColor = .blue
}
你必須(重新)將其設置爲默認的顏色在其他情況下
else {
cell.backgroundColor = .white
}
當你不顯示tableView(_:cellForRowAt:)
方法的所有代碼只是假設你離隊細胞(該方法dequeueReusableCell(withIdentifier:)
和已經註冊你的類的重用(如果你使用自定義類)。
使用這種方法可以重用單元格的視圖,這意味着如果您不重新設置屬性(例如背景顏色),它將只使用舊單元格的一種形式。在你的代碼中包含一個else,並在那裏設置背景顏色變白。
如果您繼承了UITableViewCell
類,那麼您可以使用prepareForReuse()
函數進行清理,例如,重置背景顏色。
很好的解釋 – Maddy
的UITableView不設置每個項目上的數據一次,它會根據活動繼續在所有可見項目上一次又一次地設置數據。我不能給你這種行爲的明確理由,但我可以給你解決方案。無論何時您在某些條件下設置某些項目的數據時,請始終使用「Else」語句。所以對於這個特殊的問題,你只需要在你的「If」條件下添加「Else」塊並在「Else」塊中設置項目的白色背景。
謝謝你解決了我的問題,但出於好奇你會碰巧知道爲什麼它是每9個細胞,而不是每個細胞是藍色的? –
您在屏幕上添加了7個單元格,並在用戶滾動時添加了2個 - 一個位於頂部,另一個位於底部。 – vadian