我有一个UITableView
呈现自定义PeopleCell
UITableViewCell
子类。我有一个人[A, B, C]
列表,他们有按顺序显示。但是,当我使用:
var cell: PeopleCell = tableView.dequeueReusableCellWithIdentifier(identifier) as! PeopleCell
UITableView
会使细胞乱序。有时它是B, C, A
或C, A, B
等,你明白了。我记得过去有这个问题,我采用了不使用可重复使用单元格的临时解决方案,因为我在任何时候渲染的单元格少于5个。我喜欢一些建议 - 谢谢!
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let identifier = cellIdentifier
var cell: PeopleCell = tableView.dequeueReusableCellWithIdentifier(identifier) as! PeopleCell
let person = self.people![indexPath.row] as Person
cell.lbl_name.text = nil
cell.lbl_title.text = nil
cell.btn_phone.setTitle(nil, forState: UIControlState.Normal)
cell.btn_email.setTitle(nil, forState: UIControlState.Normal)
cell.index = nil
cell.lbl_name.text = person.contactName
cell.lbl_title.text = person.title
cell.btn_phone.setTitle(person.phoneNumber, forState: UIControlState.Normal)
cell.btn_email.setTitle(person.emailAddress, forState: UIControlState.Normal)
cell.index = indexPath.row
cell.delegate = self
return cell
}
我使用的数据源只是[Person]
答案 0 :(得分:1)
您尚未提供足够的信息以便我们了解您的具体问题,因此我们必须给您一般答案。
一般的答案是cellForRowAtIndexPath需要使用数据模型(通常是数组)来保存要在每个单元格中显示的值。如果你有一个分区表视图,那里有段和行,你可以使用一个数组数组,其中外部数组是你的部分,内部数组是每个部分中的行。
当您将单元格出列时,请记住它之前可能用于在数组中显示不同的条目,因此它的视图中的值有错误。您需要完全配置单元格,包括设置不具有空/默认状态值的字段。如果您没有清空您未使用的视图,则该视图可能具有上次使用时的值。
再生细胞有点像纸张形式。想象一下,医生办公室重复使用那些给新患者提供的愚蠢形式。办公室将新病人的表格与其他人的信息联系起来,新病人必须先填写表格上的所有内容,然后再填写新信息。如果他们不这样做,他们可能会留下他们没有的疾病的信息。
再生细胞就是这样。您必须在安装新信息之前擦除单元格,或者至少用新数据替换单元格中所有视图中的数据(如果您不使用它,则清空视图。)例如,如果你有一些细胞,其中一些有图像,有些没有,你需要将一个回收的细胞的imageView.image设置为nil,以防以前使用过细胞 在图像视图中安装图像。