删除带有动画的表格行

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()

    

【讨论】:

以上是关于删除带有动画的表格行的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 从 UITableView 中删除行没有动画

删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画

在 python-docx 中,如何删除表格行?

添加带有向上动画的部分/行

AngularJS - 对象销毁后删除表格行

无法从自定义表格视图单元格按钮中删除行