2017-06-13 53 views
2

有一個UITableView的職位。
已看到帖子的ID保存在sqlite中
我想顯示,看到帖子是橙色,其他人是黑色。
但是,當我在willDisplayCell方法中設置看到後的橙色時,某些單元格的顏色不正確,否則打印日誌(「Color it」)是正確的。UITableView的不良行爲willDisplayCell方法

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    let post = postDataSource.posts[indexPath.row] 
    print(post.id) 
    let cellPost = cell as? PostListViewCell 

    if post.isRead.boolValue == true { 
     print("Color it") 
     cellPost!.body.textColor = UIColor.orangeColor() 
     cellPost!.title.textColor = UIColor.orangeColor() 
    } 
} 

例如,如果只看到一個帖子,「Color it」會被打印一次。這是正確的。但其他一些單元格在沒有「彩色」日誌的情況下顏色爲橙色。

+0

爲什麼不使用CellForRowAtIndexPath對單元格進行樣式設置的具體原因? –

+0

使用自定義單元格 – Developer

+0

@SandeepBhandari我在DataSource中使用了CellForRowAtIndexPath,我不想在DataSource中設置樣式 –

回答

2

嘗試完成if語句

if (post.isRead.boolValue == true) { 
    print("Color it") 
    cellPost!.body.textColor = UIColor.orangeColor() 
    cellPost!.title.textColor = UIColor.orangeColor() 
}else{ 
    cellPost!.body.textColor = UIColor.blackColor() 
    cellPost!.title.textColor = UIColor.blackColor()} 
+0

謝謝。我不想這樣做。我知道它解決了問題,但爲什麼當默認顏色是黑色時,我需要再次着色黑色 –

+3

因爲您正在重複使用單元格.. – RJiryes

1

1.Understanding重複使用的表格視圖單元格對象的

Apple Documentation

由於性能原因,表視圖的數據源一般應重用 UITableViewCell o當它將單元格分配給它的 tableView(_:cellForRowAt :) 方法中的行時。表視圖維護數據源標記爲可重用的對象的隊列或列表 UITableViewCell 。當被要求提供表格視圖的新單元格時,從數據源對象調用此方法。

此方法將取消現有單元格(如果有)或使用您之前註冊的類或nib文件創建一個新單元格 。

如果沒有單元可用於重用並且未註冊類或nib文件,則此方法返回nil。

prepareForReuse()的2.詞彙使用

Apple Documentation

如果一個UITableViewCell對象是可重複使用的,也就是說,它有一個重用標識符 - 該方法將被調用之前從返回的對象UITableView方法 dequeueReusableCell(withIdentifier :) 。出於性能的考慮,

你應該只重置是不相關的內容 細胞的屬性,例如,阿爾法,編輯和選擇狀態。

表視圖在 的tableView(委託_:cellForRowAt :)重用小區時 應始終重置所有內容。如果單元對象沒有關聯的重用標識符,則不調用此方法。如果您重寫此方法,則必須確保調用超類實現。

另一種手動重置已由@RJiryes描述的單元格屬性的方法。