Edited at

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

More than 1 year has passed since last update.

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