Запускать веб-запрос, когда пользователь прокручивает вниз UITableView
-
18-09-2019 - |
Вопрос
я пытаюсь заставить UIActivityIndicatorView «появляться и анимироваться», когда пользователь прокручивает до нижней части UITableView….
При достижении нижней части табличного представления выполняется веб-запрос, выполнение которого займет несколько секунд, а затем UIActivityIndicatorView должен «остановиться и скрыться».
Я запускаю появление UIActivityIndicatorView, используя tableView:willDisplayCell:forRowAtIndexPath:
Пункт списка
Но проблема в том, что UIActivityIndicatorView не появляется на экране iPhone до тех пор, пока не будет вызван весь метод (т. е. tableView:willDisplayCell:forRowAtIndexPath:), и к тому времени он уже будет скрыт.
Любые идеи о том, как:
- показать вид индикатора
- сделать веб-запрос
- скрыть вид индикатора?
новый поток?лучший путь?
Спасибо!!
в частности, моя функция выглядит так
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.results && indexPath.row == [self.results count] - 1) {
[self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal"
[self.loadingSignal startAnimating];
/// make web request that will take a few seconds
[self.loadingSignal setHidden:YES];
[self.loadingSignal stopAnimating];
}
}
}
Решение
Хорошо.Из приведенного выше фрагмента кода я вижу несколько проблем:
- Кажется, вы планируете дождаться завершения запроса, прежде чем отображать ячейку.В этом есть несколько отрицательных моментов:это раздражает пользователя и, скорее всего, приведет к зависанию пользовательского интерфейса на время отправки запроса (что может занять несколько секунд).
- Все происходит внутри
willDisplayCell
метод.
Вот как, я думаю, вам следует решить эту проблему:
- Have отобразит загрузку триггера ячейки асинхронно.
- Отобразите ячейку с надписью «Загрузка...» с помощью счетчика на ней (для вдохновения см. Tweetie 2).
- Дождитесь обратного звонка по вашей заявке
- Заполните свою модель ответом
- Удалить ячейку «Загрузка...»
- Принудительно перезагрузить ваши данные
[tableView reloadData]
Это должно позволить вам достичь того, чего вы хотите.
Другие советы
Вы можете попробовать сделать это в ячейкаForRowAtIndexPath: метод UITableView