dueDate
是可选的。第一个没有到期日,第二个没有。
let london = Task( name: "Hello from London",
createdDate: Date(),
isCompleted: false,
dueDate: Date())
let madrid = Task( name: "hola desde madrid",
createdDate: Date(),
isCompleted: false)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell
if let _ = tasks[indexPath.row].dueDate {
cell.textLabel?.text = "Due Date"
}
return cell
}
当我打开应用程序时,它会按预期运行。只有第一个单元格具有Due Date
。我希望如此,因为这只是第一个具有到期日期的任务。但是,当我删除第一个单元格(请参见下面的代码)并重新加载日期时,Due Date
也被添加到第二个单元格中。我不明白。我希望不应该添加它,因为第二个任务没有截止日期
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let remove = UITableViewRowAction(style: .normal, title: "Remove") { action, index in
let task = self.tasks.remove(at: indexPath.row)
print(task.name) //
tableView.reloadData()
}
remove.backgroundColor = .red
return [remove]
}
如果您需要更多信息,请询问。
答案 0 :(得分:1)
这是因为出队,请替换为
cell.textLabel?.text = tasks[indexPath.row].dueDate != nil ? "London" : ""
当您删除第一个单元格时,第二个单元格会使其出队,因此您会看到第二个单元格配置了已删除单元格的属性,因此在cellForRowAt
内部,您需要确保每次运行都设置代码>
答案 1 :(得分:1)
查看您的cellForRow:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell
if let _ = tasks[indexPath.row].dueDate {
cell.textLabel?.text = "London"
}
return cell
}
现在,当您删除一个单元格时,您可以对以前具有到期日期但现在没有截止日期的单元格调用reloadData
。由于if
未执行,因此您无需对单元格执行任何操作。添加一个else
案例。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell
if let _ = tasks[indexPath.row].dueDate {
cell.textLabel?.text = "London"
}
else {
cell.textLabel?.text = nil
}
return cell
}