对于UITableView,我是否需要实现trailingSwipeActionsConfigurationForRowAt和/或editActionsForRowAt?

zko*_*kon 7 uitableview ios swift ios11

推出iOS11 trailingSwipeActionsConfigurationForRowAt(并领先......).这是否意味着我现在必须实施

  1. 用于控制iOS11 AND的滑动的尾随/前导方法
  2. editActionsForRowAt 对于iOS10?

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

澄清:我想要对行进行操作,但我不想要iOS11中的默认行为performsFirstActionWithFullSwipe.如果我只是实现,editActionsForRowAt那么iOS11会完全滑动.

PGD*_*Dev 8

根据您的要求:

我想要对行进行操作,但我不希望在iOS11中执行performFirstActionWithFullSwipe的默认行为.如果我只是实现editActionsForRowAt,那么iOS11会完全滑动.

在iOS-10及以下版本中,

要获得edit actions工作UITableView,只需实现以下方法:

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]
}
Run Code Online (Sandbox Code Playgroud)

在iOS-11中,

引入了2种新方法来支持a UITableView,ie leadingSwipeActionsConfigurationForRowAttrailingSwipeActionsConfigurationForRowAt.

根据Apple的说法,

滑动操作

这些方法取代了-editActionsForRowAtIndexPath:如果实现的话

返回nil以获取默认滑动操作

因此,您可以实现这两种方法来获取iOS-11特定的行为.即使你没有editActionsForRowAt被召唤.

如果你不想default full swipe behaviour of edit actioniOS-11中,只需设置即可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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果答案有效,请接受并投票。快乐编码..:) (2认同)

Dan*_*iel 7

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

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

或者:

editActionsForRowAt在 iOS 10 上实现,并在 iOS 11 或更高版本上实现拖尾/滑动方法 - 稍微高级一些。

或者:

忽略 iOS 10 并仅支持 iOS 11 或更新的拖尾/滑动操作,因为您的大多数客户无论如何都可能会运行 iOS 11 - 无论如何,行操作通常被视为可选功能。


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


完全滑动方法在 iOS 11 之前不可用。它们在 iOS 10 中不起作用。