iOS 11阻止滑动UITableViewCell的默认行为

15

我的应用程序中有一个屏幕,其中包含表格视图,并在滑动UITableViewCell时显示"编辑""删除"按钮。

一切都很好,但问题出现在iOS 11的UITableViewCell默认动画中。

我知道在iOS 11中有一些行为和原理发生了变化。当您继续向左滑动单元格时,editActionsForRowAt方法将自动调用。

有时这很好,但是当您在表格滑动上添加多个按钮时,会显得非常丑陋。

请看下面,在iOS 10和iOS 11中的滑动单元格的默认行为。

iOS 10:

enter image description here

iOS 11:

enter image description here

您可以看到,在iOS 11中,如果我向左滑动,则editActionsForRowAt方法将自动调用并显示警报消息。

我的问题是:是否有方法停止iOS 11的这种行为,并编写相应代码?

因为如果您的表格上有两个以上的按钮,它会看起来很丑陋。


1
为什么你要停止它呢?这是在iOS11上的标准行为,最终用户会逐渐习惯的,如果他们尚未习惯的话。 - holex
@holex - 是的,我接受它的标准行为,但你可以看看我的最后一个视频。当表格有多个按钮并且要滑动时,看起来很丑陋,最终用户会感到困惑,不知道该怎么做。 - iPatel
2
那是你基于个人看法的假设,这里是我的看法:我也是一个终端用户(除了作为开发者),但我并没有觉得那种行为令人困惑;显然是新的东西,但绝对不会让人感到困惑或丑陋 :) - holex
1
然而,这里有一个来自苹果文档的提示:值得一看的是UISwipeActionsConfigurationperformsFirstActionWithFullSwipe属性,例如作为一个起点。 - holex
根据我的测试,当我滑动更多时,自动显示我的警告,所以我只是问而已 :) - iPatel
@holex,我并不是在说这是苹果的问题,显然它有吸引人的和好用的功能。但在我的情况下,如果你在滑动时按下1-2个按钮,并且点击任何一个按钮,都会显示警告。在iOS 11中,如果没有传递操作/点击,拉动滑块时会出现一些混乱。我只是想为自己停止这个功能。谢谢 :) - iPatel
1个回答

21

这似乎可以解决您所寻找的问题。然而,该动画与iOS 10中的动画不完全相同,但它消除了完全滑动,看起来仍然很好。

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let deleteAction = UIContextualAction.init(style: UIContextualAction.Style.destructive, title: "Delete", handler: { (action, view, completion) in
        //TODO: Delete
        completion(true)
    })

    let editAction = UIContextualAction.init(style: UIContextualAction.Style.normal, title: "Edit", handler: { (action, view, completion) in
        //TODO: Edit
        completion(true)
    })

    let config = UISwipeActionsConfiguration(actions: [deleteAction, editAction])

    config.performsFirstActionWithFullSwipe = false
    return config
}

关键代码是 config.performsFirstActionWithFullSwipe = false,这将禁用全屏滑动。

以上代码将覆盖 iOS 11 上的 func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath),但对于 iOS 10 以下的设备,仍将使用您的 editActionsforRowAt


让我来检查一下,谢谢你的回复。 - iPatel
我使用了 "editActionsForRowAt" 方法来在表格视图单元格中添加左滑,请问如何在该方法内完全停止滑动?因为我还要支持 iOS 10.0 以下的设备。 - Hari Narayanan
在这种情况下,"completionHandler(true)" 这行代码是做什么用的? - Hrvoje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接