【问题标题】:iOS 11 stop default behaviour of swipe UITableViewCelliOS 11 停止滑动 UITableViewCell 的默认行为
【发布时间】:2017-10-11 12:29:28
【问题描述】:

在我的应用程序中,一个屏幕具有表格视图并在滑动时显示“编辑”“删除”按钮UITableViewCell

一切正常,但问题在于 iOS 11 中 UITableViewCell 的默认动画。

我知道 iOS 11 中的一些行为和基础发生了变化。当您继续拉动以滑动您的单元格时,editActionsForRowAt 方法将被自动调用。

有时这很好,但是当您在表格滑动上添加多个按钮时,就会出现丑陋的行为。

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

iOS 10:

iOS 11:

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

我的问题:有什么理由阻止 iOS 11 的这种行为并为此编写代码?

因为如果您的桌子有超过 2 个按钮,那么它看起来很难看。

【问题讨论】:

  • 你为什么要阻止它?这是 iOS11 上的标准行为,最终用户会习惯它,如果他们还没有习惯的话。
  • @holex - 是的,我接受它的标准行为,但你可以看看我的上一个视频。当表格有多个按钮并且要滑动时,看起来丑陋的最终用户会在不采取任何行动的情况下混淆它是如何发生的。
  • 这是您基于意见的假设,所以这是我的意见:我也是最终用户(除了是开发人员),我可以完全不觉得这种行为令人困惑;显然是新事物,但绝对既不令人困惑也不丑陋:)
  • 然而,这里是来自 Apple Docs 的 提示:例如,值得先看看 UISwipeActionsConfigurationperformsFirstActionWithFullSwipe 属性。跨度>
  • 根据我的测试,当我滑动更多然后自动显示我的警报时,这就是为什么我什么都不问了:)

标签: ios swift uitableview ios11


【解决方案1】:

这似乎可以满足您的需求。不过,动画与 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),但您的 editActionsforRowAt 仍将用于子 iOS 10 设备。

【讨论】:

  • 让我检查一下,谢谢您的回复
  • 我使用“editActionsForRowAt”方法在表格视图单元格中添加左滑动请如何在此方法中停止完全滑动。因为我也习惯了 iOS 10.0 以下的设备。?
  • 在这种情况下,"completionHandler(true)" 的代码行是什么?
猜你喜欢
  • 2015-03-11
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2018-09-02
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
相关资源
最近更新 更多