ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ios - Swift] RefreshControl 사용하기
    ios 2020. 11. 22. 15:49

     

     

     

    이번 시간에는 UITableView의 cell을 아래로 드래그 시 데이터를 Refresh 할 수 있도록 해보겠습니다. 

     

    1. UIRefreshControl

    사용자가 스크롤 가능한 콘텐츠 영역의 상단을 아래로 드래그하면 스크롤 뷰에 새로 고침 컨트롤이 표시되고 진행률 표시기에 애니메이션을 적용하고 앱에 알립니다.

    let refreshControl = UIRefreshControl()

     

    refreshControl.addTarget(self, action: #selector(refreshWork), for: .valueChanged)
    mTableView.addSubview(refreshControl)

    RefreshControl을 스크롤이 가능한 인터페이스에 Subview로 등록합니다.

     

    selector: valueChage 발생 시 호출될 함수입니다.

    for: 작업 메서드가 호출되는 컨트롤 관련 이벤트 비트 마스크입니다.

    valueChange: 컨트롤을 드래그하거나 조작하여 일련의 다른 값을 방출하도록 하는 터치입니다.

     

     

     

    @objc func refreshWork() {
       refreshControl.beginRefreshing()
       strArray.insert("New Data - 0", at: 0)
       strArray.insert("New Data - 1", at: 1)
       strArray.insert("New Data - 2", at: 2)
       strArray.insert("New Data - 3", at: 3)
       refreshControl.endRefreshing()
       mTableView.reloadData()
    }

    beginREfreshing, endRefreshing는 Refresh의 시작과 끝을 알립니다.

     

    Refresh가 발생하면 StrArray에 새로고침 될 데이터를 등록하고 실행 결과를 보도록 하겠습니다.

     

     

     

     

    아래는 전체 소스입니다.

    class RefreshViewController: UIViewController {
    
        @IBOutlet weak var mTableView: UITableView!
        var strArray = Array<String>()
        let refreshControl = UIRefreshControl()
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            for i in 0..<20 {
                strArray.append("Data Row - \(i)")
            }
            
            mTableView.delegate = self
            mTableView.dataSource = self
            
            refreshControl.addTarget(self, action: #selector(refreshWork), for: .valueChanged)
            mTableView.addSubview(refreshControl)
        }
        
        @objc func refreshWork() {
            refreshControl.beginRefreshing()
            
            strArray.insert("New Data - 0", at: 0)
            strArray.insert("New Data - 1", at: 1)
            strArray.insert("New Data - 2", at: 2)
            strArray.insert("New Data - 3", at: 3)
            
            refreshControl.endRefreshing()
            
            mTableView.reloadData()
        }
    }
    
    extension RefreshViewController: UITableViewDelegate, UITableViewDataSource {
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return strArray.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = UITableViewCell()
            
            cell.textLabel?.text = "\(strArray[indexPath.row])"
            
            return cell
        }
    }

    댓글

Designed by Tistory.