UIrefreshcontrol не перезагружает новые элементы с нумерацией страниц - PullRequest
0 голосов
/ 27 сентября 2019

Я импортировал какао-боб, а именно PaginatedTableView, и в него встроены функции UIRefreshControl и Pagination.Когда я открываю страницу, приложение вылетает из-за ошибки индекса вне диапазона, которая, по-моему, происходит из-за Refreshcontrol.

Я пытался найти, где находится ошибка, но она выглядит нормально.

lazy var refreshControltableView: UIRefreshControl = {
    let refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    refreshControl.addTarget(self, action: #selector(self.handleRefreshtableView(_:)), for: UIControl.Event.valueChanged)
    return refreshControl
}()

extension PaginatedTableView {

public func loadData(refresh: Bool = false) {
    load(refresh: refresh)
}

@objc fileprivate func handleRefreshtableView(_ refreshControl: UIRefreshControl) {
    load(refresh: true)
}

// All loading logic goes here i.e. showing/hiding of loaders and pagination
private func load(refresh: Bool = false) {

    // reset page number if refresh
    if refresh {
        currentPage = firstPage
        hasMoreData = true
    }

    // return if already loading or dont have any more data
    if !hasMoreData || isLoading {
        return }

    // start loading
    isLoading = true

    paginatedDelegate?.loadMore(currentPage, pageSize, onSuccess: { hasMore in
        self.hasMoreData = hasMore
        self.currentPage += 1
        self.isLoading = false
        self.refreshControltableView.endRefreshing()
        if self.customReloadDataBlock != nil {
            self.customReloadDataBlock?()
        } else {
            self.reloadData()
        }
    }, onError: { _ in
        self.refreshControltableView.endRefreshing()
        self.isLoading = false
    })
}

// Scroll to end detector
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let height = scrollView.frame.size.height
    let contentYoffset = scrollView.contentOffset.y
    let distanceFromBottom = scrollView.contentSize.height - contentYoffset
    if distanceFromBottom < height {
        load()
    }
}
}



func loadMore(_ pageNumber: Int, _ pageSize: Int, onSuccess: ((Bool) -> Void)?, onError: ((Error) -> Void)?) {
    // Call your api here
    if pageNumber < pages - 1 {
        onSuccess?(true)
        print("success")
    }
    else {
        onSuccess?(false)
    }
    // Send true in onSuccess in case new data exists, sending false will disable pagination

    // If page number is first, reset the list
    if pageNumber == 0 {
        cleaner()
        }
    myApi(pageNumber)
    // else append the data to list
    // If Api responds with error


    // Else end success with flag true if more data available
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! myTableCell
    cell.myLabel.text = self.labelArray[indexPath.row]
    cell.myImage.image = self.imageArray[indexPath.row]
    cell.myDateLabel.text = self.labelDateArray[indexPath.row]
    return cell
}

Функция loadMore находится в классе делегата.Функция myApi находит данные и добавляет их в список.Это код Pod, который, я думаю, связан с моей проблемой.Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...