Бесконечная прокрутка tableView, swift - PullRequest
0 голосов
/ 11 июля 2020

Проведя небольшое исследование, я обнаружил, что этот метод довольно полезен для достижения моей цели: разбивки на страницы в табличном представлении. viewModel, и когда я вызываю load more Data, номер страницы увеличивается на 1.

Проблема в том, что этот фрагмент кода, когда я прокручиваю вниз, чтобы загрузить больше данных, вызывает мою функцию viewModel, как и все возможные времена .

Фактически, если я печатаю что-то в строке своего кода, оно печатается примерно 15 раз, когда я дойду до конца своей страницы.

В чем проблема с этим кодом? Как я могу это улучшить? Я хочу дойти до конца страницы и один раз вызвать мой loadMoreData , чтобы он загружал данные в pageCounter. Я думаю, что что-то упустил

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Добавьте обработчик завершения в метод loadMoreData () и используйте логическую проверку для вызова, как показано ниже -

var isLoadingStarted = true

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height
    
    if offsetY > contentHeight - scrollView.frame.height {
        
        if vievModel.!paginationFinished && isLoadingStarted {
            isLoadingStarted = false
            self.viewModel.loadMoreData {
               self.tableView.reloadData()
               //self.isLoadingStarted = true
            }
            
        }
    }
}

//Handle loadMoreData method as below
static func loadMoreData(_ , completion:@escaping (() -> Void)) {
    .
    .
    .
    completion()
   
}

Используйте делегат представления прокрутки для обнаружения начала перетаскивания и установите там флаг isLoadingStarted -

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    self.isLoadingStarted = true
}

Попробуйте один раз.

1 голос
/ 11 июля 2020

нужно пометить

var isLoading = false

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height
    
    if offsetY > contentHeight - scrollView.frame.height && !isLoading {

        //print

        if vievModel.!paginationFinished {
            isLoading = true
            self.viewModel.loadMoreData()
            self.tableView.reloadData()
            isLoading = false
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...