적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/Swift

[Swift iOS] detect UITableView scroll to bottom

hongssup_ 2021. 12. 8. 20:27
반응형

UITableView에서 데이터 로드 후 마지막까지 스크롤을 내리면 추가로 데이터를 더 로드하도록 하는 법

 

다음과 같이 tableView 내장 함수 중에서 willDisplay cell 을 사용하여 스크롤 끝을 감지할 수 있다. 

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if indexPath.row + 1 == yourArray.count {
        print("load more")
    }
}

참고 : CodeRedirect - Detect when UITableView has scrolled to the bottom

 

 

음.. 근데 문제가 스크롤 다 내려왔을 때도 호출하지만, 아예 데이터를 로드할 때 마다 함께 호출되는 것 같아서 

이래도 되는지는 모르겠지만 다음과 같이 사용해주었다.

해당 함수 호출 횟수를 count 하는 loadCount와 실제 로딩해야할 페이지 indexPage 변수를 추가해주고

loadCount가 홀수일때만 페이지를 새로 로딩하고 가져오도록 하여 

페이지 첫 로딩이 아닌 실제 스크롤이 마지막까지 내려갔을때만 데이터를 더 로드하게끔 만들어보았다. 

ㅋㅋㅋ 뭐 일단 잘 되긴 된다. 

var loadCount = 0
var indexPage = 0

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if indexPath.row + 1 == yourArray.count {
        print("load more")
        if !(loadCount % 2 == 0) {
            indexPage += 1
            print("index: \(indexPage)")
            loadMore()
        }
        loadCount += 1
        print("loadCount: \(loadCount)")
    }
}

 

 

 

728x90
반응형