Swift tableView Pagination

后端 未结 14 1417
长情又很酷
长情又很酷 2020-11-28 20:00

I have success working tableview with json parsing codes.But may have 1000 more item so need pagination when scrolling bottom side. I dont know how can i do this my codes un

14条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-28 20:36

    For that you need to have server side change also.

    1. Server will accept fromIndex and batchSize in the API url as query param.

      let listUrlString =  "http://bla.com/json2.php?listType=" + listType + "&t=" + NSUUID().UUIDString + "&batchSize=" + batchSize + "&fromIndex=" + fromIndex
      
    2. In the server response, there will be an extra key totalItems. This will be used to identify all items are received or not. An array or items fromIndex to batchSize number of items.

    In the app side

    1. First loadItem() will be called with fromIndex = 0 and batchSize = 20 (for example in viewDidLoad() or viewWillAppear). removeAll items from privateList array before calling loadItem() for the first time

    2. Server returns an array of first 20 items and totalItems total number of items in the server.

    3. Append the 20 items in privateList array and reload tableView

    4. In tableView:cellForRowAtIndexPath method check if the cell is the last cell. And check if totalItems (form server) is greater than privateList.count. That means there are more items in the server to load

      if indexPath.row == privateList.count - 1 { // last cell
          if totalItems > privateList.count { // more items to fetch
              loadItem() // increment `fromIndex` by 20 before server call
          }
      }
      

    Question: where is refresh ? will be scrolling ?

    Refresh after appending new items in the array when server response received. (step 3)

    Scrolling will trigger tableView:cellForRowAtIndexPath for every cell when user scrolls. Code is checking if it is the last cell and fetch remaining items. (step 4)

    Sample project added:
    https://github.com/rishi420/TableViewPaging

提交回复
热议问题