ukSeung iOS

[Swift] UITableView Cell 밀어서 삭제 본문

iOS/Swift

[Swift] UITableView Cell 밀어서 삭제

욱승 2023. 5. 21. 20:00

안녕하세요 욱승임다 ㅋ

좋은 주말보내고 계신가요? ㅎㅎ 

이번포스팅에서는 UITableView Cell을 밀어서 삭제하는 동작을 구현해볼게요

 

 

예제

cell 밀어서 삭제

 

예제 코드

import Foundation
import UIKit
import SnapKit

class SwipeToDeleteCellViewController: UIViewController, UIViewControllerAttribute {
    
    var navTitle: String?
    var lastContentOffset: CGFloat = 0.0
    var tableViewArray: [Int] = []
    
    lazy var tableView = UITableView().then {
        $0.delegate = self
        $0.dataSource = self
        $0.register(TitleTableViewCell.self, forCellReuseIdentifier: "TitleTableViewCell")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setTableViewArray()
        setNavigationBar()
        setUI()
        setAttributes()
        bindRx() // 미사용 함수
    }
    
    func setTableViewArray() {
        for x in 0...100 {
            tableViewArray.append(x)
        }
    }
    
    func setNavigationBar() {
        self.navigationItem.title = navTitle ?? ""
    }
    
    func setUI() {
        self.view.backgroundColor = .white
        self.view.addSubview(tableView)
    }
    
    func setAttributes() {
        tableView.snp.makeConstraints {
            $0.edges.equalTo(self.view.safeAreaLayoutGuide)
        }
    }
    
    /// 미사용 함수
    func bindRx() {
        
    }
}

extension SwipeToDeleteCellViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tableViewArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TitleTableViewCell", for: indexPath) as! TitleTableViewCell
        cell.title.text = String(tableViewArray[indexPath.row])
    
        return cell
    }
    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            tableView.beginUpdates() // beginUpdate
            
            tableView.deleteRows(at: [indexPath], with: .fade) // 셀 삭제 애니메이션 설정
            
            tableViewArray.remove(at: indexPath.row) // 데이터 소스에서 해당 셀의 데이터 삭제
            
            tableView.endUpdates() // endUpdate
        }
    }
}

예제로 0부터 100까지 숫자를 배열에 append 하여 예제 코드를 짰슴

 

중요한 부분은 맨밑 tableViwe commit 

.delete 될때 하는 동작들을 유심히 봐둘것!

 

결론

포스팅 길이가 짧은만큼 간단하게 구현 가능한 기능! 🤭

 

GitHub

 

GitHub - shinseunguk/SwiftPractice: SwtiftPractice

SwtiftPractice. Contribute to shinseunguk/SwiftPractice development by creating an account on GitHub.

github.com

 

728x90
반응형