在编辑模式下删除表格行上的删除按钮⛔️

Posted

技术标签:

【中文标题】在编辑模式下删除表格行上的删除按钮⛔️【英文标题】:remove the delete button ⛔️ on table rows in edit mode 【发布时间】:2015-11-26 20:52:56 【问题描述】:

我正在尝试学习 Swift,但我的项目中有一个问题让我抓狂。 我在 parse.com 提供的 ViewController 中有一个工作数据列表。我设法实现了一个滑动功能,它显示了用于删除和编辑的按钮。那工作正常。现在我希望用户能够重新排序单元格。所以我成功实现了一个按钮,将表格置于编辑模式。我的两个问题是:

    当我进入编辑模式时,我只想能够重新排序单元格,因为编辑和删除是通过滑动完成的(通过“tableView(tableView:UITableView,editActionsForRowAtIndexPath indexPath:NSIndexPath)”。我怎样才能实现用户在编辑模式下并触摸自动提供的删除圈时看不到用于删除和编辑的 2 个按钮?

    是否可以完全删除删除圈?使用“UITableViewCellEditingStyle.None”也会禁用滑动功能。

提前致谢!

【问题讨论】:

实现canEditRowAtIndexPath数据源方法,如果表格处于编辑模式则返回false,否则返回true 不幸的是,它保留了滑动动作,但使编辑按钮什么也不做。使用代码:func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool if(tableView.editing == true) return false else return true 【参考方案1】:

为避免在左侧将 set UITableView isEditing 设置为 true 时出现圆形红色删除按钮,并且单击它时不执行任何操作,对我有用的最小值是这个(Swift 4,ios 11)

// 避免单元格左侧的圆形红色删除按钮:

func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool 
    return false



func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle 
    return .none

我也有这些功能,可能会交互:

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool 
    return savedTempTable.isEditing


// Including this function in the delegate enable left-swipe deleting
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)

    if editingStyle == .delete 
        savedConversions.remove(at: indexPath.row)
    



// Including this function enables reordering
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath,to destinationIndexPath: IndexPath)

    let elem = savedConversions.remove(at: sourceIndexPath.row)
    savedConversions.insert(elem, at: destinationIndexPath.row)

【讨论】:

我发现,将这些行放入会阻止向左滑动手势显示删除按钮。【参考方案2】:
override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle 
    return .none


override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool 
    return false

【讨论】:

【参考方案3】:

虽然人们可以通过滑动删除一行,但编辑模式下的删除按钮不应该被删除。人们可能不知道滑动手势,并且通过删除删除按钮(他们在编辑模式下已经预料到),应用程序变得更加难以使用。

如果你真的想删除删除按钮,那么你必须实现委托方法tableView(_:editingStyleForRowAtIndexPath:)。您可以在屏幕处于编辑模式时返回.None,在屏幕不处于编辑模式时返回.Delete

要启用重新排序,您必须实现数据源方法 tableView(_:canMoveRowAtIndexPath:)tableView(_:moveRowAtIndexPath:toIndexPath:)

【讨论】:

其实这听起来很合理。 好的,那么你如何使用那个删除按钮呢?默认情况下它什么也不做,即使我希望它调用 tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) with editingStyle == .delete【参考方案4】:

你在编辑时按照这种方式删除删除图标:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
     return UITableViewCellAccessoryNone;
 

【讨论】:

以上是关于在编辑模式下删除表格行上的删除按钮⛔️的主要内容,如果未能解决你的问题,请参考以下文章

在编辑模式下按下删除按钮时 UITableView 崩溃

在 UITableView 编辑模式下更改删除按钮标题 [重复]

在 UITableview 的编辑模式下滚动时删除按钮消失

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

在 SwiftUI 分组表中按下编辑模式按钮之前不会删除行

如何在编辑模式下确定 UITableViewCell 的删除按钮的原点 (x,y)?