UITableViewCell에 커스텀 Swipe action 적용하기 | Swift

이남준·2021년 2월 5일
1
post-thumbnail
post-custom-banner

UITableViewCell에 커스텀 Swipe action 적용하기

위와 같이 UITableViewCell을 통해 여러개의 항목을 표시하는 상황에서 각 cell Swipe action을 통해 수정, 삭제 등의 동작을 하고 싶을 때,

Swipe action 을 적용 하는 방법을 알아 보자


사용자의 입력을 받아, 구매할 목록을 테이블뷰 셀을 통해 표시 해주는 상황에서 Swipe action을 통해

목록을 삭제하거나 내용을 수정할 수 있도록 하려면

tableView(_:leadingSwipeActionsConfigurationForRowAt:)

UITableViewDelegate에 있는 tableView(_:leadingSwipeActionsConfigurationForRowAt:) 메소드를 구현 해야한다

(혹은 tableView(_:trailingSwipeActionsConfigurationForRowAt:))

optional func tableView(_ tableView: UITableView, 
leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?

Parameter로 tableView, indexPath를 받고 UISwipeActionConfiguration을 리턴 하는데,

UISwipeActionsConfiguration

UISwipeActionsConfiguration은 스크린샷 2021-02-05 오전 11 25 44 이것 처럼 Table row를 스와이프 했을 때, 표시할 항목(메뉴)이다

UISwipeActionsConfiguration 은 UIContextualAciton를 모아둔 오브젝트 이기 때문에,

여러개의 UIContextualAciton을 먼저 정의하고, 한 UISwipeActionsConfiguration 객체에 담아 리턴하면 된다

UIContextualAction

스크린샷 2021-02-05 오전 11 33 18

애플 문서에서 볼 수 있듯이, UIContextualAction은 style, title, handler 3개의 파라미터를 통해 만들 수 있다

let action = UIContextualAction(style: UIContextualAction.Style, title: String?, handler: UIContextualAction.Handler)

style

UIContextualAction.Style 은 .normal, .destructive가 있는데,

.destructive는 스와이프를 통해 삭제 등을 할 때, table row가 끝까지 밀리는 스타일 이고, des

.normal은 스와이프를 통해 수정 등을 할 때, row가 끝까지 밀리지 않고 고정되는 스타일 이다 nor

title

title은 action의 title을 자유롭게 정의하면 된다

handler

스크린샷 2021-02-05 오전 11 50 21

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])
}
profile
iOS 개발자의 기록
post-custom-banner

0개의 댓글