我有一个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 :(得分:0)
来自UITableView上的Apple docs
当表视图要求数据源配置要显示的单元对象时,数据源可以通过向表视图发送dequeueReusableCellWithIdentifier:消息来传入排队对象,并传入重用标识符。数据源在返回之前设置单元格的内容和任何特殊属性。这种单元对象的重用是一种性能增强,因为它消除了单元创建的开销。
因此,在这种情况下,您将indexPath
的值存储在单元格中," cellIndex",它可以被其他单元格重用。因此,它将根据先前在队列中分配的值随机显示该值。
为了遇到这种情况,您可以将值存储在viewController中的数组变量中,因此每次数据源想要重新创建单元格时,它都将始终从数组中获取。
其次,您可以直接将indexPath分配给单元格ui元素,例如UILabel。
cell.titleLabel.text = "\(indexPath)"