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

时间:2017-11-02 04:55:14

标签: ios swift uitableview ios11

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

  1. 用于控制iOS11 AND
  2. 的滑动的尾随/引导方法 对于iOS10,
  3. editActionsForRowAt
  4. 如何让模拟器运行iOS10模拟以查看我的应用程序在后台操作系统中的行为?由于现在一切都是iOS11,我不确定我的应用程序将在该版本中如何?

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

4 个答案:

答案 0 :(得分:7)

根据您的要求:

我想要对行进行操作,但我不想在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]
}

在iOS-11中,

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

根据 Apple

  

滑动动作

     

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

     

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

因此,您可以实现这两种方法来获取 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
}

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

答案 1 :(得分:4)

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

仅实施editActionsForRowAt,它适用于iOS 10,11和12。

或:

在iOS 10上实施editActionsForRowAt,并在iOS 11或更新版本上实现尾随/滑动方法 - 这些方法稍显优雅。

或:

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

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

iOS 11之前无法使用完全滑动方法。它们无法在iOS 10中使用。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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