Nano Hash - криптовалюты, майнинг, программирование

UITableView тянет для обновления и разбиения на страницы с помощью willDisplay

Это мой третий день, и после прочтения почти десятков статей я не мог понять, как реализовать разбиение на страницы в UITableview с использованием метода willDisplay. Я пытаюсь имитировать функцию iMessages pull to pagination.

Мой код ниже переходит в бесконечный цикл при первом обновлении.

Может ли кто-нибудь заглянуть в код и предложить способ исправить бесконечную загрузку?

Тх заранее.

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    if indexPath.row == 0 && !self.isLoading {

        self.isLoading = true

        fetchClientsMessages(page: self.currentPage, completed: {

            if self.currentPage == 0 {
                self.messageArray.removeAll()
            }

            self.messageArray.append(contentsOf: self.clientChatMessages!.messages!)

            // Sort message by ID so that latest message appear at the bottom.
            self.messageArray = self.messageArray.sorted(by: {$0.id! < $1.id!})

            self.messagesTable.reloadData()

            // Scroll to the top
            self.messagesTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)

            self.lastPage = self.currentPage

            self.currentPage = self.currentPage + 1
            self.isLoading = false
        })

    }

}

Ответы:


1

Сначала загрузите код внутри, если он будет запущен, затем в его обратном вызове вы выполните

self.messagesTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
self.isLoading = false

который снова вызовет willDisplay как indexPath = 0 и isLoading = false => бесконечная загрузка, вы хотите немного прокрутить таблицу вниз, чтобы указать, что данные загружены, а затем оставить пользователя прокручиваться вверх, пока снова не нажмет index = 0

25.10.2018
  • Я прокомментировал //self.messagesTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, анимированный: true), он все еще переходит в бесконечный цикл, так что это, похоже, не вызывает никаких проблем. Чего-то еще не хватает, так что прекратите бесконечную загрузку. 25.10.2018
  • вы можете использовать insertRows вместо self.messagesTable.reloadData() 25.10.2018
  • Я попробую, похоже, у меня есть еще несколько дней, чтобы разобраться с этой штуковиной insertRows. 25.10.2018

  • 2

    Вы должны переместить прокрутку и reloadData вверх последним в методе fetchClientMessages

        fetchClientsMessages(page: self.currentPage, completed: {
    
            if self.currentPage == 0 {
                self.messageArray.removeAll()
            }
    
            self.messageArray.append(contentsOf: self.clientChatMessages!.messages!)
    
            // Sort message by ID so that latest message appear at the bottom.
            self.messageArray = self.messageArray.sorted(by: {$0.id! < $1.id!})
    
            self.lastPage = self.currentPage
    
            self.currentPage = self.currentPage + 1
            self.isLoading = false
    
            self.messagesTable.reloadData()
    
            // Scroll to the top
            self.messagesTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
        })
    

    Дайте мне знать, если это работает.

    25.10.2018
  • Tx для предложения, но он не работает, он все еще переходит в бесконечный цикл. 25.10.2018
  • Как я уже говорил ранее, даже закомментирование прокрутки до верхней строки не помогает. Он по-прежнему входит в бесконечный цикл. 25.10.2018
  • @DaveMS Я обновил свой ответ. попробуйте также поставить reloadData после isLoading = false. Это также вызывает повторный вызов метода willDisplay. Я пропустил это в моей первой версии 25.10.2018
  • Не помогло, тот же результат, он все еще идет в бесконечном цикле. 25.10.2018
  • вы устанавливаете self.isLoading = false в любом другом месте? 25.10.2018
  • var isLoading = false объявлено в начале класса VC. Он больше нигде не установлен. 25.10.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..