首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >默认情况下,破坏性样式的UIContextualAction似乎会删除行

默认情况下,破坏性样式的UIContextualAction似乎会删除行
EN

Stack Overflow用户
提问于 2017-11-04 08:07:15
回答 2查看 5.5K关注 0票数 16

我看到的问题是,当我使用.destructive pass truecompletionHandler中创建一个UIContextualAction时,似乎有一个删除行的默认操作。

如果您从Xcode的模板创建一个新的Master-Detail应用程序,并在MasterViewController中添加此代码...

代码语言:javascript
复制
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let testAction = UIContextualAction(style: .destructive, title: "Test") { (_, _, completionHandler) in
        print("test")
        completionHandler(true)
    }
    return UISwipeActionsConfiguration(actions: [testAction])
}

您滑动的行将被删除。注意,这里没有更新表视图的代码。此外,模型不会更新,如果您向上滚动以重新加载行,它将重新出现。

在这种情况下,传递false不会删除该行。或者使用.normal样式和true也不会删除行。

默认情况下,.destructivetrue会导致该行被删除。

有人能解释这种行为吗?为什么要删除该行?

EN

回答 2

Stack Overflow用户

发布于 2019-08-28 13:02:14

我不能在iOS 13中重现这个问题。iOS 12和之前版本的行为要么是一个bug,要么只是被撤回了(可能是因为它令人困惑)。

在iOS 13中,如果您只是从.destructive操作返回,调用completion(true)而不执行任何操作,则什么也不会发生,事情就到此为止了。不会为您删除单元格。

票数 5
EN

Stack Overflow用户

发布于 2019-04-29 06:06:02

我同意Kris Gellci的回答,但请注意,如果您使用的是NSFetchedResultsController,可能会使事情变得复杂。似乎对于破坏性的UIContextualAction,调用completion(true)将删除该行,但NSFetchedResultsController的委托也是如此。因此,您很容易以这种方式结束错误。使用NSFetchedResultsController时,我决定调用completion(false) (使上下文菜单关闭),而不管操作是否成功,然后让委托在相应对象已被删除的情况下删除表行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47106002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档