728x90
반응형




위와 같이 테이블뷰에 좌측에서 또는 우측에서 스와이프를 하면 나오는 메뉴를 보았을 겁니다.


모바일 기기에 최소한의 정보를 보여주다보니 기능을 숨겨서 사용할 때가 있습니다.


이럴때 사용하기 편한 스와이프 액션을 알아보겠습니다.





override func viewDidload() {
    tableView.delegate = self
}
cs


tableView의 델리게이트를 준수하여 콜백 메소드를 구현했다는 표시로 self를 대입해줍니다.



// Mark: - TableView
extension MainViewController: UITableViewDelegate, UITableViewDataSource {
    ...

    // 셀 우측 스와이프
    func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        
        let important = importantAction(at: indexPath)
        let delete = deleteAction(at: indexPath)
        return UISwipeActionsConfiguration(actions: [delete, important])
    }
    
    // 셀 좌측 스와이프
    func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let complete = completeAction(at: indexPath)
        return UISwipeActionsConfiguration(actions: [complete])
    }
}
cs


델리게이트를 준수하여 trailing, leading SwipreAction 별칭으로 되어있는 함수를 구현하였습니다.


셀 우측 스와이프를 할때 알람과 삭제 변수를 생성하고 UISwipeActionsConfiguration 함수 호출할때 인자로 넣어줍니다.


배열로 받기 때문에 여러개를 넣어도 되고 한개만 넣어도 됩니다.


셀 좌측 스와이프도 동일합니다.






    // 스와이프 알림
    func importantAction(at indexPath: IndexPath) -> UIContextualAction {
        let todo = todoList[indexPath.row]
        let action = UIContextualAction(style: .normal, title: "알림") { (action, view, success) in
        
            todo.setValue(!((todo.value(forKey: "isTodo"asBool)!), forKey: "isTodo")
            success(true)
        }
        action.image = UIImage(named: "icons8-clock-50")
        action.backgroundColor = UIColor.purple
        return action
    }
    
    // 스와이프 삭제
    func deleteAction(at indexPath: IndexPath) -> UIContextualAction {
        let action = UIContextualAction(style: .destructive, title: "삭제") { (action, view, success) in
            self.todoList.remove(at: indexPath.row)
            self.tableView.deleteRows(at: [indexPath], with: .automatic)
            success(true)
        }
        action.image = UIImage(named: "icons8-trash-can-50")
        action.backgroundColor = .red
        return action
    }
    
    // 스와이프 할일
    func completeAction(at indexPath: IndexPath) -> UIContextualAction {
        let action = UIContextualAction(style: .destructive, title: "할일") { (action, view, success) in
            success(true)
        }
        action.image = UIImage(named: "icons8-checkmark-50")
        action.backgroundColor = .blue
        return action
    }
cs


코드가 길어져 별도의 함수로 정의 하였습니다.


UIContextualAction 인스턴스를 만들어 주었고


이미지를 사용하려고 무료 icon 이미지를 넣어주었습니다.


처리 하고 싶은 로직을 클로저에서 처리하면 됩니다.

 




728x90
반응형

'프로그래밍 > iOS' 카테고리의 다른 글

Swift 4 TableView Section  (0) 2019.03.04
Swift 4 UIRefreshControl  (0) 2019.03.04
Swift 4 TextView PlaceHolder  (0) 2019.02.21
Swift 4 WKWebView 로딩(Indicator)  (0) 2019.02.20
Swift 4 WKWebView  (0) 2019.02.20

+ Recent posts