我有一个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需要使用数据模型(通常是数组)来保存要在每个单元格中显示的值。如果您有一个截面表视图,其中既有节又有行,则可以使用一个数组数组,其中外部数组是您的节,而内部数组是每个节中的行。
当您使一个单元出队时,请记住,它以前曾用于在数组中显示其他条目,因此它的视图中的值是错误的。您需要完全配置单元格,包括将没有值的字段设置为空/默认状态。如果您没有清空未使用的视图,则该视图可能具有上次使用时的值。
回收单元有点像纸质表格。想象一下,医生办公室会重复使用那些给新患者的愚蠢表格。办公室会向新患者发送带有其他人信息的表格,新患者必须先擦除表格上的所有内容,然后再填写新信息。如果没有,他们可能会留下有关自己没有的疾病的信息。
回收的细胞就是这样。您必须先删除单元格,然后再安装新信息,或者至少用新数据替换单元格中所有视图中的数据(或者,如果不使用它,则清空视图。)例如,如果您如果有些单元格中有一些图像而有些则没有,则需要将回收单元的imageView.image设置为nil,以防以前使用该单元的情况下在图像视图中安装了图像。
关于ios - 在表 View 中保留数组元素的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31767903/