重新加载数据时不会删除UITableViewCells

时间:2015-02-03 22:49:56

标签: ios uitableview swift

图1.

enter image description here 图2。 enter image description here

我有一个显示多个页面的ViewController(由UIPageControl指示)。每个页面都有一个由用户完成的4个任务的列表,显示在UITableView中。列表中的每个任务都有一个UISegmentedControl,供用户输入任务的数据。

点击页面控件会递增或递减当前页码,并触发tableView.reloadData()以显示任务的当前值。

tableView在第一次加载表数据时显示正确的数据,如图1所示。递增/递减页面控件会导致创建新单元格并将放在之前的单元格下面,图2中最顶层的单元格与图1中的单元格相同。由于原始单元格保留,因此当页面发生变化时,ui似乎没有更新。

每次更改页面时,单元格堆栈都会增长1级。

为什么旧的单元格不会从表格视图中删除?

class TheViewController : UIViewController {

    ...

    func displayPage(page : Int) {

        locationLabel.text = ...

        // refresh tasks array
        tasks = sortTasks()

        // refresh table
        tableView.reloadData()
    }

    @IBAction func pageControlValueChanged(sender: UIPageControl) {

        displayPage(pageControl.currentPage)
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let task = tasks[indexPath.row]

        var cellId = task.pointnum == nil ? KCellIdentifierYesNo : kCellIdentifierLevel;

        var cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as TaskTableViewCell

        cell.configureForTask(task)

        return UITableViewCell()
    }

    // MARK: - Tasks

    func sortTasks() -> [Task] {

        let currentInspection = children[currentPage]

        return sortSet(currentInspection.tasks, onKey: "taskId", ascending: true) as [Task]
    }

}

0 个答案:

没有答案