【iOS11】UITableViewセルのスワイプで削除を無効にする方法【Swift】


iOS11ではUITableViewのセルをスワイプしただけで削除されてしまいます。

元々のコード

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let deleteButton: UITableViewRowAction = UITableViewRowAction(style: .normal, title: "削除") { (action, index) -> Void in
        self.array.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .fade)
    }
    deleteButton.backgroundColor = UIColor.red

    return [deleteButton]
}




誤操作を防ぐため、従来のようにスワイプ後一旦停止し、削除ボタンを押した際にセルの削除を行いたい場合は下記のコードを追記することで解決できます。

追記するコード

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let delete = UIContextualAction(style: .destructive, title: "削除") { (action, sourceView, completionHandler) in
            completionHandler(true)
            self.array.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .fade)
        }
        let swipeAction = UISwipeActionsConfiguration(actions: [delete])
        swipeAction.performsFirstActionWithFullSwipe = false
        return swipeAction
}

参考

How do I disable the full swipe on a tableview cell in iOS11