我需要在editActionsForRowAtIndexPath中创建一个动作来删除表中的行。在互联网上进行了一些研究之后,我来到了这段代码:
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let remove = UITableViewRowAction(style: UITableViewRowActionStyle.Destructive, title: "Remover", handler: { (action: UITableViewRowAction, indexPath: NSIndexPath) -> Void in
self.tableData.removeObjectAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
})
return [remove]
}
但现在我收到此错误
UITableView内部错误:无法生成新的剖面图 旧节数:1和新节数:0
答案 0 :(得分:7)
从UITableView
删除行时,需要注意两件事。
首先,只有在已从数据源中删除对象后才应调用tableView.deleteRowsAtIndexPaths
。因为它会再次检查计数并确保结果数据源的值减少一个。
现在要记住的第二件事是没有。删除最后一行后,section不能为0。如果要返回0到numberOfSectionsInTableView
,则至少在空行计数上返回1。另一种选择是在删除最后一行时实际删除索引。
答案 1 :(得分:1)
您不需要使用' editActionsForRowAtIndexPath'方法,除非你实现自己的自定义附件视图,但其他方面你可以使用标准滑动左手势删除行,并调用委托是commitEditingStyle
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
tableData.removeObjectAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}
else if editingStyle == .Insert {
//edit cell
}
}
//change the default 'Delete' text
override func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String? {
return "Show this instead of delete"
}
答案 2 :(得分:0)
执行deleteRowsAtIndexPaths或reloadData,但不能同时执行这两项操作。