iOS
[swift] tableView 끝에 도달했을때 감지, 무한 스크롤
D0HAN.
2020. 8. 9. 00:06
많은 어플, 모바일웹 등에서 사용하는 기술이다
일정 리스트를 불러와서 쭈르륵 보여주고, 스크롤이 바닥에 닿으면 다음 글들을 보여주는 식!
무한 스크롤 기능을 구현해보려했다.
처음에는 scrollViewDidScroll 메소드를 이용해서 다음과 같이 구현했다
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if self.tableView.contentOffset.y > tableView.contentSize.height-tableView.bounds.size.height {
page += 1
thisUrl = baseUrl + String(page)
loading(url: thisUrl)
tableView.reloadData()
}
}
이렇게 코드를 짰더니 무한 스크롤 새로고침이 되는 오류가 생김
한번 끝까지 닿으면 더이상 스크롤을 안움직여도 2페이지,3페이지,4,5,6,7....계속 로딩이 돼서 테이블뷰에 추가된다.
loading이 비동기식이라 한번 실행 됐을때 동시다발적으로 여러번 실행이 돼서 그런 거기 때문에
해결 방법은 한번 실행 됐을때 그 동작이 끝날때까지 다시 실행되지 않도록 하는 기능을 추가하면 된다.
해결한 코드:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if self.tableView.contentOffset.y > tableView.contentSize.height-tableView.bounds.size.height {
if(check){
isAvailable = false
page += 1
thisUrl = baseUrl + String(page)
loading(url: thisUrl)
}
tableView.reloadData()
}
}
isAvailable 변수를 만들었다.
내 경우는 후에 파싱까지 끝낸 후에 isAvailable을 true로 바꿔주었다!