Swift:如何使用编辑按钮删除并停用滑动删除?

Posted

技术标签:

【中文标题】Swift:如何使用编辑按钮删除并停用滑动删除?【英文标题】:Swift: How to delete with Edit button and deactivate swipe to delete? 【发布时间】:2015-04-16 10:58:31 【问题描述】:

我在导航栏中添加了一个带有 IBAction 的编辑按钮:

@IBOutlet weak var editButton: UIBarButtonItem!

@IBAction func doEdit(sender: AnyObject) 

    if (self.tableView.editing) 
        editButton.title = "Edit"
        self.tableView.setEditing(false, animated: true)
     else 
        editButton.title = "Done"
        self.tableView.setEditing(true, animated: true)
    

为了删除我有的单元格

    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
    if (editingStyle == UITableViewCellEditingStyle.Delete) 
        arr.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    

不幸的是,这也会激活滑动删除。如何在不执行滑动删除的情况下删除单元格?

【问题讨论】:

UITableView disable swipe to delete, but still have delete in Edit mode? 的可能重复项 谢谢,但不幸的是,链接的主题是关于 Objective-C 而不是 Swift。 Objective-C 和 Swift 都使用相同的运行时和框架。两者都使用 Cocoa(或 ios 中的 Cocoa Touch)。您的问题更多是关于我如何使用 UITableView?(Cocoa 概念)而不是 Swift(语言)问题。 【参考方案1】:

解决方案(来自this answer),翻译成Swift:

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle 
    if (self.tableView.editing) 
            return UITableViewCellEditingStyle.Delete;
    

    return UITableViewCellEditingStyle.None;

【讨论】:

谢谢,但 Xcode 告诉我 Method does not override any method from its superclass。当我删除override 时,该错误消失了。当单击删除按钮时,没有任何反应。某处不需要tableView.deleteRowsAtIndexPaths 方法吗? 如果您从 UITableViewController 扩展,则需要覆盖。如果您使用的是常规 UIViewController,则不需要 override(该类没有此方法,因此您无法覆盖它) 您是否为 TableView 设置了委托和数据源?您也可以发布此 ViewController 中的所有代码吗?【参考方案2】:

这是工作代码:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
    if (editingStyle == UITableViewCellEditingStyle.Delete) 
        arr.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    


func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle 
    if (self.tableView.editing) 
        return UITableViewCellEditingStyle.Delete
    
    return UITableViewCellEditingStyle.None

【讨论】:

在 Swift-4 表格视图编辑委托方法改变【参考方案3】:

Swift-4

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? 
    let delete = UITableViewRowAction(style: .destructive, title: "delete")  (action, indexPath) in
        // delete item at indexPath

    

    let action2 = UITableViewRowAction(style: .normal, title: "action2")  (action, indexPath) in
        // action2 item at indexPath
    

    return [delete, action2]

【讨论】:

以上是关于Swift:如何使用编辑按钮删除并停用滑动删除?的主要内容,如果未能解决你的问题,请参考以下文章

如何从“滑动滑块同步”中删除滑块导航并显示缩略图?

一旦按下滑动删除按钮,删除功能(提交编辑样式功能)会导致应用程序崩溃

Swiftui 移除滑动删除功能

当用户没有完全滑动以删除表格视图单元格时,如何禁用/启用编辑按钮?

如何向列表添加编辑按钮,就像在向左滑动列表项时删除按钮一样

小程序滴滴车主板块的银行卡管理左滑删除编辑