对于 UITableView,我是否需要实施 trailingSwipeActionsConfigurationForRowAt and/or editActionsForRowAt?

For UITableView do I need to implement trailingSwipeActionsConfigurationForRowAt and/or editActionsForRowAt?

iOS11 引入了 trailingSwipeActionsConfigurationForRowAt(并领先...)。这是否意味着我现在必须实施

  1. trailing/leading iOS11 AND
  2. 控制滑动的方法
  3. editActionsForRowAt 对于 iOS10?

如何让模拟器进行 运行 iOS10 模拟以查看我的应用程序在后台 OS 中的行为?由于现在一切都是 iOS11,我不确定我的应用程序在该版本中的表现如何?

澄清一下:我想要对行执行操作,但我不想要 performsFirstActionWithFullSwipe 的 iOS11 中的默认行为。如果我只是实施 editActionsForRowAt,那么 iOS11 会执行完整的滑动操作。

它被声明为可选的,所以不,您不必实现它。我假设默认实现是什么都不做

如果您想要某种形式的行操作,您需要:

editActionsForRowAt 实施,它将适用于 iOS 10、11、12 和 13。但它在 iOS 14(或更新版本)中不可用。

或:

在 iOS 10 上实现 editActionsForRowAt,并在 iOS 11 或更高版本上实现 trailing/swiping 方法 - 稍微更高级。

或:

忽略 iOS 10,只支持 iOS 11 或更新的 trailing/swiping 操作,因为您的大多数客户可能都是 运行 iOS 11 -无论如何,行操作通常被视为可选功能。


如果您不想要完整的滑动行为,您只能在 iOS 11 或更高版本上实现此功能,您可以将 performsFirstActionWithFullSwipe 设置为 false


完整的滑动方法在 iOS 11 之前不可用。它们在 iOS 10.

中不起作用

根据您的要求:

我想要对行执行操作,但我不想要 performsFirstActionWithFullSwipe iOS11 中的默认行为。如果我只是实施 editActionsForRowAt,那么 iOS11 会完全滑动。

在iOS-10及以下,

要让 edit actionsUITableView 中工作,只需实施以下方法:

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
{
    return true
}

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
{
    let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexpath) in
        //YOUR_CODE_HERE
    }
    deleteAction.backgroundColor = .red
    return [deleteAction]
}

在iOS-11,

引入了 2 种新方法来支持 UITableView 中的编辑,即 leadingSwipeActionsConfigurationForRowAttrailingSwipeActionsConfigurationForRowAt

根据 Apple,

Swipe actions

These methods supersede -editActionsForRowAtIndexPath: if implemented

return nil to get the default swipe actions

因此,您可以实施这两种方法来获得 iOS-11 特定行为。即使你不这样做 editActionsForRowAt 也会被调用。

如果不想要iOS-11中的default full swipe behaviour of edit action,只需设置performsFirstActionWithFullSwipe to false.

示例:

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

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
{
    let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { (action, view, handler) in
        //YOUR_CODE_HERE
    }
    deleteAction.backgroundColor = .red
    let configuration = UISwipeActionsConfiguration(actions: [deleteAction])
    configuration.performsFirstActionWithFullSwipe = false
    return configuration
}

如果您仍然遇到任何问题,请告诉我。

根据我的经验,如果您想要编辑模式以及自定义滑动,您确实需要 editActions… 以及 trailing/leading… on iOS 11。