본문 바로가기
Developer/iOS, Swift

[Swift] 아래로 당겨서 새로고침 기능 (Scroll 후 Refresh하기)

by Doony 2020. 2. 26.

흔히 많이 사용하는 TableView나 CollectionView 등에서 아래로 스크롤 시 새로고침 기능이 있다는 것을 잘 알고 계실겁니다. 이미 수 많은 앱에서 사용하고 있는 대표적인 기능 중 하나인데요. 사용 방법은 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private var refreshControl = UIRefreshControl()
    
override func viewDidLoad() {
        super.viewDidLoad()
        
        loadServer() // 서버 데이터 로드
        
        collectionView.refreshControl = refreshControl
        refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
        
        // Do any additional setup after loading the view.
}
    
    
@objc func refresh(){
      // refresh Action
        
        clearAllViewData() // 모든 뷰 데이터를 삭제합니다.  
        self.collectionView.reloadData() // Reload하여 뷰를 비워줍니다.
      
        
}
    
override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if (refreshControl.isRefreshing) {
           
            self.refreshControl.endRefreshing()
            loadServer()
            
        }
}
cs

기본적으로 collectionView나 TableView에는 refreshControl 기능이 있습니다. 따라서 위와 같이 기본 뷰에 설정한 뒤, 메소드만 구현해주면 됩니다.

이 때, DispatchQueue를 사용하고, scrollViewDidEndDragging를 사용한 부분은 참고만 해주시면 됩니다. 저 같은 경우 collectionView를 비우고 reload할 때 뷰가 조금 버벅거리는 현상이 있었습니다. 이미 reload하는 과정에서 당겨진 스크롤이 뷰와 맞지 않아 그러는 듯 했는데, 저런 방식으로 해결할 수 있다는 글들을 좀 봐서 대충 적어놓은 부분입니다. 아직 미해결된 부분이네요. 아무래도 데이터를 먼저 불러오고, reload해야할듯한데, 그렇게되면 collectionView 기본 함수들에서 충돌이 발생하더라구요. 좀 더 고민을 해야되는 부분입니다.

댓글