删除带有动画的表格行
Posted
技术标签:
【中文标题】删除带有动画的表格行【英文标题】:Delete table row with animation 【发布时间】:2015-07-12 06:59:34 【问题描述】:我想在表格视图控制器中删除带有动画的行。 我使用以下代码:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if (editingStyle == .Delete)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
let LM_ITEM = lebensmittel[indexPath.row]
managedObjectContext?.deleteObject(lebensmittel[indexPath.row])
self.DatenAbrufen()
但按删除后,我收到此错误:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新(1)后现有节中包含的行数必须等于行数更新前包含在该节中 (1),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数(0 移入, 0 移出)。' *** 首先抛出调用堆栈: (0x1856382d8 0x1973040e4 0x185638198 0x1864eced4 0x18a296e5c 0x10010e278 0x10010ef9c 0x18a2b0ea4 0x18a3a6880 0x18a0e5398 0x18a0ce474 0x18a0e4d34 0x18a0a3f54 0x18a0de82c 0x18a0ddee4 0x18a0b1120 0x18a3522b8 0x18a0af634 0x1855f0240 0x1855ef4e4 0x1855ed594 0x1855192d4 0x18ef6f6fc 0x18a116f40 0x100134420 0x1979aea08),点击 libc++abi.dylib:以 NSException 类型的未捕获异常终止
【问题讨论】:
【参考方案1】:您需要在致电tableView.deleteRowsAtIndexPaths(..)
之前更新您的模型
像这样,
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if (editingStyle == .Delete)
let LM_ITEM = lebensmittel[indexPath.row]
managedObjectContext?.deleteObject(lebensmittel[indexPath.row])
self.DatenAbrufen()
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
斯威夫特 5
tableView.deleteRows(at: [indexPath], with: .automatic)
【讨论】:
【参考方案2】:在 Swift 4 中使用它
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
它将删除 tableView 行,动画类似于 iPhone 消息应用程序。
【讨论】:
Swift ? 4.2 :UITableViewRowAnimation.automatic
? UITableView.RowAnimation.automatic
或者直接使用.automatic
。【参考方案3】:
斯威夫特 4.2
tableView.deleteRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
【讨论】:
【参考方案4】:尝试以下方法:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if (editingStyle == .Delete)
let LM_ITEM = lebensmittel[indexPath.row]
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
managedObjectContext?.deleteObject(LM_ITEM)
self.DatenAbrufen()
【讨论】:
以上是关于删除带有动画的表格行的主要内容,如果未能解决你的问题,请参考以下文章