图1.
图2。
我有一个显示多个页面的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]
}
}