포스트

7주차 과제 (5)

Lv.5

Lv5. 당겨서 새로고침 구현

  • 위시 리스트의 “다른 상품 보기”를 업그레이드 해봅니다.
  • 스크롤을 내려 당기면, Refresh Indicator를 노출시킵니다.
  • 데이터를 불러오는동안 잠시, Indicator를 고정시킵니다.
  • 반드시 사용할 것 : UIRefreshControl

Pull to Refresh를 구현하는 내용이다.

이전 챌린지 과제에 있었기에 어려운건 없을듯하다.

좀 다른 점이라면, 이전에는 TableView에서 Pull to Refresh였다면,

이번엔 화면자체에서 pull to refresh를 하는것이다.

참고사이트를 보니 별거 없어보인다.

scrollView를 하나 만들어 주었고.

실제로 refresh를 별도로 생성할때는 작동이 뭔가 안되는것 같았다.

그래서 scrollView에 refreshControl프로퍼티가 있어서 그것을 이용하기로 했다.

1
2
3
4
5
6
7
8
9
10
11
12
// viewdidload
scrollView.refreshControl = UIRefreshControl()
scrollView.refreshControl?.addTarget(self, action: #selector(reloadJson), for: .valueChanged)

    
@objc func reloadJson() {
        
    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        self.dataManager.fetchRequest()
    }
        
}

이렇게 해주었다.

Apr-11-2024 03-28-56

하지만 로드 이후에도 계속 인디게이터가 돌아가는걸 알 수있다.

문제해결

1
2
3
4
5
6
7
8
@objc func reloadJson() {
        
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
            self.dataManager.fetchRequest()
            self.scrollView.refreshControl?.endRefreshing() // new
        }
        
    }

refreshing을 종료해주는 메서드가 없어서 생긴 문제다.

Apr-11-2024 03-31-04

완료.

2초 너무 긴거같아서 1초로 바꾼다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.