기본 메소드들
// 오른쪽에서 왼쪽으로 스와이프
tableView(_:trailingSwipeActionsConfigurationForRowAt:)
// 왼쪽에서 오른쪽으로 스와이프
tableView(_:leadingSwipeActionsConfigurationForRowAt:)구현 순서
1. UIContextualAction을 사용해서 액션 구현
let deleteAction = UIContextualAction(style: .destructive, title: "삭제") { (action, view, completionHandler) in
// 삭제 로직
completionHandler(true)
}2. UISwipeActionsConfiguration에 액션 등록
// 액션 여러개 등록 가능
let configuration = UISwipeActionsConfiguration(actions: [deleteAction])3. 전체 코드
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction(style: .destructive, title: "삭제") { (action, view, completionHandler) in
// 삭제 로직
completionHandler(true)
}
let configuration = UISwipeActionsConfiguration(actions: [deleteAction])
configuration.performsFirstActionWithFullSwipe = false
return configuration
}기타
색깔, 이미지 지정 가능
deleteAction.backgroundColor = .systemRed
deleteAction.image = UIImage(systemName: "trash")performsFirstActionWithFullSwipe
true: 스와이프 하면 첫 번째 액션이 즉시 실행false: 스와이프 된 상태에서 나타는 버튼을 눌러서 액션 실행
실제 적용 코드 (이슈 트래킹 앱)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = makeDeleteAction()
let closeAction = makeCloseAction()
let configuration = UISwipeActionsConfiguration(actions: [deleteAction, closeAction])
configuration.performsFirstActionWithFullSwipe = false
return configuration
}
private func makeDeleteAction() -> UIContextualAction {
let deleteAction = UIContextualAction(style: .destructive, title: nil) { (action, view, completionHandler) in
// TODO: 얼럿 띄우고 삭제 로직
completionHandler(true)
}
deleteAction.image = UIImage(systemName: "trash")
return deleteAction
}
private func makeCloseAction() -> UIContextualAction {
let closeAction = UIContextualAction(style: .normal, title: nil) { (action, view, completionHandler) in
// TODO: 이슈 닫기 로직
completionHandler(true)
}
closeAction.image = UIImage(systemName: "archivebox.fill")
closeAction.backgroundColor = .systemIndigo
return closeAction
}