기본 메소드들 // 오른쪽에서 왼쪽으로 스와이프 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 }