在不设置后退滑动按钮动画的情况下显示警报

时间:2019-01-15 08:07:50

标签: ios swift xcode uitableview swipe

当用户向左滑动单元格时,我有一个tableView想要在其中进行编辑和删除按钮。为此,我使用tableView的trailingSwipeActionsConfigurationForRowAt委托方法。一切正常,它按预期显示了两个按钮。 我想在用户点击删除时显示确认警报。这也可以正常工作,但是当出现警报时,单元会设置动画回其原始位置。因此,删除,编辑按钮不再可见。这就是我不想要的。

是否存在一种方法来防止单元格在发出警报时回弹?

1 个答案:

答案 0 :(得分:0)

我已经找到解决该问题的方法。 为了设置按钮的动作,您需要初始化UIContextualAction类。此类的处理程序的布尔值类型为(Bool) -> Void。因此,基本上,当您设置处理程序关闭时,您可以返回true或false,这意味着操作已完成。因此,如果您在用户点击警报按钮时调用完成按钮,则这些按钮将保持可见状态,直到解除警报为止。

我尝试过并起作用的代码如下:

// 1
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    //2
    let action = UIContextualAction(style: .normal, title: "") { _, _, success in
        let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
        let alertAction = UIAlertAction(title: "OK", style: .cancel, handler: { _ in
            //3
            success(true)
        })
        alertController.addAction(alertAction)
        self.present(alertController, animated: true, completion: nil)
    }
    return UISwipeActionsConfiguration(actions: [action])
}
  1. 实施trailingSwipeActionsConfigurationForRowAt委托方法以设置滑动操作。如果通过实现leadingSwipeActionsConfigurationForRowAt委托方法向右滑动,则在需要按钮时也可以执行相同的操作。

  2. 为按钮设置操作。在UIContextualAction的处理程序关闭中,您可以设置alertController。

  3. 在点击警报的“确定”按钮时呼叫success(true)