서버에서 10개씩 보내주는 데이터를 받아서 스크롤을 할 때마다 다음 페이지를 불러오는 뷰를 구현했어야 했다.
GET
메서드 한번에 모든 데이터가 불러와지는 것이 아닌, 마지막으로 스크롤 했을 때 그 다음 페이지의 데이터를 GET
해야 했다. 이 과정에서 메서드 호출 시점에 대한 고민이 필요했고, 호출 시점을 **“테이블뷰 셀의 마지막에 도달했을 때”**로 설정하려 했다.
그렇다면 테이블 뷰의 마지막에 도달했을 때를 어떻게 구할 것인가?
pageCount
, 전체 아이템의 개수를 담는 totalItemCount
, **Paging이 되고 있는지 체크하는 isPaging
**이 필요하다.
itemsPerPage
(각 페이지의 아이템 개수)를 이용해서 전체 페이지의 개수를 구해준다.let totalPage = (data.totalCount) / 10
isPaging
을 true
로 바꿔준다.if self.pageCount >= totalPage {
self.isFinishPaging = true
}
// 데이터 불러오고 배열에 추가, reloadData() 해주기
테이블 뷰의 마지막에 도달했을 때
를 구한다.let tableView = self.searchView.searchResultTableView
let offsetY = tableView.contentOffset.y //현재 y축 끝의 위치
let contentHeight = tableView.contentSize.height // 컨텐츠 뷰의 사이즈(높이)
let visibleHeight = tableView.bounds.height // 현재 보여지는 테이블 뷰의 높이
마지막에 도달했을 때는 Y축의 위치가
contentHeight - visibleHeight
(즉 전체ScrollView(TableView)
에서 보여지는 높이를 뺐을 때)보다 커졌을 때이다.
if offsetY > contentHeight - visibleHeight {
getJoinedFriends()
}
⭐️⭐️⭐️ 이때 isLoadingData
라는 플러그로 데이터가 로딩이 끝났는지에 대해 체크하는 과정이 필요하다!!