위와 같이 UITableViewCell을 통해 여러개의 항목을 표시하는 상황에서 각 cell Swipe action을 통해 수정, 삭제 등의 동작을 하고 싶을 때,
Swipe action 을 적용 하는 방법을 알아 보자
사용자의 입력을 받아, 구매할 목록을 테이블뷰 셀을 통해 표시 해주는 상황에서 Swipe action을 통해
목록을 삭제하거나 내용을 수정할 수 있도록 하려면
UITableViewDelegate에 있는 tableView(_:leadingSwipeActionsConfigurationForRowAt:) 메소드를 구현 해야한다
(혹은 tableView(_:trailingSwipeActionsConfigurationForRowAt:))
optional func tableView(_ tableView: UITableView,
leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
Parameter로 tableView, indexPath를 받고 UISwipeActionConfiguration을 리턴 하는데,
UISwipeActionsConfiguration은 이것 처럼 Table row를 스와이프 했을 때, 표시할 항목(메뉴)이다
UISwipeActionsConfiguration 은 UIContextualAciton를 모아둔 오브젝트 이기 때문에,
여러개의 UIContextualAciton을 먼저 정의하고, 한 UISwipeActionsConfiguration 객체에 담아 리턴하면 된다
애플 문서에서 볼 수 있듯이, UIContextualAction은 style, title, handler 3개의 파라미터를 통해 만들 수 있다
let action = UIContextualAction(style: UIContextualAction.Style, title: String?, handler: UIContextualAction.Handler)
UIContextualAction.Style 은 .normal, .destructive가 있는데,
.destructive는 스와이프를 통해 삭제 등을 할 때, table row가 끝까지 밀리는 스타일 이고,
.normal은 스와이프를 통해 수정 등을 할 때, row가 끝까지 밀리지 않고 고정되는 스타일 이다
title은 action의 title을 자유롭게 정의하면 된다
handler는 action, view, completionHandler를 파리미터로 갖고, 액션을 선택했을 때 실행 된다
이렇게 3개의 파라미터를 통해 UIContextualAction을 정의하고, UISwipeActionsConfiguration에 담아 리턴 해주면 완성 이다
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: .normal, title: "swipe", handler: {(action, view, completionHandler) in
print("Swiped") // 실행하고 싶은 내용
completionHandler(true)
})
return UISwipeActionsConfiguration(actions: [action])
}