我有一个 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]
的 Swift 数组
最佳答案
您没有提供足够的信息让我们了解您的具体问题,因此我们必须给您一个笼统的答复。
一般的答案是 cellForRowAtIndexPath 需要使用数据模型(通常是数组)来保存要在每个单元格中显示的值。如果你有一个分区 TableView ,其中既有部分又有行,你可以使用一个数组数组,其中外部数组是你的部分,内部数组是每个部分中的行。
当您将单元格出列时,请记住它之前可能用于显示数组中的不同条目,因此它的 View 中的值是错误的。您需要完全 配置单元格,包括将没有值的字段设置为空/默认状态。如果您不清空未使用的 View ,它可能具有上次使用时的值。
回收电池有点像纸质表格。想象一下,医生办公室重复使用它提供给新患者的那些愚蠢的表格。办公室给新病人一张表格,上面有其他人的信息,新病人必须先擦掉表格上的所有内容,然后才能填写他们的新信息。如果他们不这样做,他们可能会留下关于他们没有的疾病的信息。
回收电池就是这样。您必须先删除单元格,然后再在其中安装新信息,或者至少用新数据替换单元格中所有 View 中的数据(或者如果不使用它,则清空 View 。)因此,例如,如果您如果单元格中有些有图像,有些则没有,则需要将回收单元格的 imageView.image 设置为 nil,以防先前使用该单元格确实在 ImageView 中安装图像。
关于ios - 保留 TableView 中数组元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31767903/