UITableView проблема с перезагрузкой - PullRequest
0 голосов
/ 18 октября 2018

У меня есть UITableView внутри UIScrollView и реализован пейджинг, с помощью которого я получаю 10 записей на каждой странице.Я сталкиваюсь с проблемой, когда после строки IndexPath установлено значение 9, затем снова UITableView перезагружает ячейки, начиная со строки 2, из-за чего все страницы загружаются один раз.Вот мой код:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if listData != nil{
        print("list count in numberOfRowsInSection\(listData?.count)")
        return (listData?.count)!
    }
    return 0

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    print("CellForRowIndexPath:\(indexPath.row)")
    let cell: NewPostCell = tableView.dequeueReusableCell(withIdentifier: "NewPostCell") as? NewPostCell ??
        NewPostCell(style: .default, reuseIdentifier: "NewPostCell")
    cell.delegate = self
    cell.updateWithModel(self.listData![indexPath.row] as AnyObject)
    cell.tbleUpdateDelegate = self
    cell.selectionStyle = .none
    cell.accessoryType = .none
    return cell
}

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    print("in will display row - \(indexPath.row)")

    if pageNumber >= totalPages {
        return
    }
    else
    {
        if (listData?.count)! == 10*pageNumber{
            if (listData?.count)! - 3 == indexPath.row{
                if !boolHitApi{
                    boolHitApi = true
                    return
                }
                pageNumber += 1
                self.callService()
            }
        }
    }
}

override func viewWillAppear(_ animated: Bool) {
    callService()
}
func callService(){
    SVProgressHUD.show()
    setPageToOne()
    ProfileApiStore.shared.requestToGetProfile(loggedInUserId: UserStore.shared.userId, userId:  UserStore.shared.userIdToViewProfile, limit: "10", page: String(self.pageNumber), completion: {(result) in
        SVProgressHUD.dismiss()
        self.totalPages = result.totalPages!
        if self.listData?.count == 0  || (self.pageNumber as AnyObject) as! Int == (1 as AnyObject) as! Int{
            self.listData = result.userdata?.newPostData
        } else {
            self.listData = self.listData! +  (result.userdata?.newPostData)!
        }
        self.tableView.reloadData()
    })
}

1 Ответ

0 голосов
/ 18 октября 2018

Код, который вы упомянули в комментариях, добавляет в источник данных 10 строк (self.listData), но вы вызываете insertRows только с одной строкой.

Вы можете просматривать их, добавляя элемент в массив и каждый раз добавляя строку:

func callService() {
    ProfileApiStore.shared.requestToGetProfile(loggedInUserId: UserStore.shared.userId, userId:  UserStore.shared.userIdToViewProfile, limit: "10", page: String(self.pageNumber), completion: {(result) in
        SVProgressHUD.dismiss()
        self.totalPages = result.totalPages!
        let newItems = result.userdata?.newPostData

        tableView.beingUpdates()
        for item in newItems {
            self.listData.append(item)
            let indexPath = IndexPath(row:(self.listData!.count-1), section:0) // shouldn't this be just self.listData!.count as your adding a new row?
            tableView.insertRows(at: [indexPath], with: .left)
        }
        tableView.endUpdates()
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...