2017-07-10 85 views
0

我有一個UITableView設置,幾乎可以正常工作,但如果您快速向上或向下滾動,它會亂序混亂單元格。我設置標籤,以反映索引路徑,甚至當它開始了滾動時UITableView洗牌

[0,0] [0,1] [0,2] [0,3] [0,4] [0,5] [ 0,6]

快速揮筆几上下後,細胞看起來像這樣

[0,1] [0,6] [0,2] [0,3] [0,4 ] [0,5] [0,0] [0,1]

我的代碼是類似於以下

import UIKit 

class TableViewController : UITableViewController { 

    var dates: [Date]? 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return dates?.count ?? 0 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     guard let cell = tableView.dequeueReusableCell(withIdentifier: tableViewCell.storyboardID, for: indexPath) as? tableViewCell else { fatalError() } 

     let date = dates?[indexPath.row] 
     cell.date = date 
     cell.delegate = self 
     cell.cellIndex = indexPath 

     return cell 
    } 
} 
+0

你能發佈你的整個tableviewcontroller類嗎?我99%知道我知道這裏發生了什麼,但是如果沒有完整的代碼,將很難幫助你解決問題。 –

+0

何時/在哪裏實際設置單元格內容?我懷疑你在重新使用單元時沒有正確設置數據。 –

回答

0

Apple docs上UIT消息發送到表視圖,傳入重用標識符:ableView

當表視圖詢問數據源配置用於顯示的單元對象,數據源可以通過發送dequeueReusableCellWithIdentifier訪問排隊對象。數據源在返回之前設置單元格的內容和任何特殊屬性。細胞對象的這種重用是性能增強,因爲它消除了細胞創建的開銷。

因此,在這種情況下,您將indexPath的值存儲在單元propeties「cellIndex」中,該單元可以被其他單元格重用。因此,它會根據先前在隊列中分配的值隨機顯示值。

爲了遇到此,您可以值到數組變量存儲的viewController,因此DataSource要重新創建細胞每一次,它會從陣列中獲得一致。其次,您可以直接將indexPath分配給像UILabel這樣的單元ui元素。

cell.titleLabel.text = "\(indexPath)"