在表视图中保留数组元素的顺序

时间:2015-08-02 01:52:21

标签: ios swift uitableview

我有一个UITableView呈现自定义PeopleCell UITableViewCell子类。我有一个人[A, B, C]列表,他们按顺序显示。但是,当我使用:

渲染表格中的单元格时
var cell: PeopleCell = tableView.dequeueReusableCellWithIdentifier(identifier) as! PeopleCell

UITableView会使细胞乱序。有时它是B, C, AC, 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数组

1 个答案:

答案 0 :(得分:1)

您尚未提供足够的信息以便我们了解您的具体问题,因此我们必须给您一般答案。

一般的答案是cellForRowAtIndexPath需要使用数据模型(通常是数组)来保存要在每个单元格中显示的值。如果你有一个分区表视图,那里有段和行,你可以使用一个数组数组,其中外部数组是你的部分,内部数组是每个部分中的行。

当您将单元格出列时,请记住它之前可能用于在数组中显示不同的条目,因此它的视图中的值有错误。您需要完全配置单元格,包括设置不具有空/默认状态值的字段。如果您没有清空您未使用的视图,则该视图可能具有上次使用时的值。

再生细胞有点像纸张形式。想象一下,医生办公室重复使用那些给新患者提供的愚蠢形式。办公室将新病人的表格与其他人的信息联系起来,新病人必须先填写表格上的所有内容,然后再填写新信息。如果他们不这样做,他们可能会留下他们没有的疾病的信息。

再生细胞就是这样。您必须在安装新信息之前擦除单元格,或者至少用新数据替换单元格中所有视图中的数据(如果您不使用它,则清空视图。)例如,如果你有一些细胞,其中一些有图像,有些没有,你需要将一个回收的细胞的imageView.image设置为nil,以防以前使用过细胞 在图像视图中安装图像。