Запускать веб-запрос, когда пользователь прокручивает вниз UITableView

StackOverflow https://stackoverflow.com/questions/1869099

Вопрос

я пытаюсь заставить UIActivityIndicatorView «появляться и анимироваться», когда пользователь прокручивает до нижней части UITableView….

При достижении нижней части табличного представления выполняется веб-запрос, выполнение которого займет несколько секунд, а затем UIActivityIndicatorView должен «остановиться и скрыться».

Я запускаю появление UIActivityIndicatorView, используя tableView:willDisplayCell:forRowAtIndexPath:

Пункт списка

Но проблема в том, что UIActivityIndicatorView не появляется на экране iPhone до тех пор, пока не будет вызван весь метод (т. е. tableView:willDisplayCell:forRowAtIndexPath:), и к тому времени он уже будет скрыт.

Любые идеи о том, как:

  1. показать вид индикатора
  2. сделать веб-запрос
  3. скрыть вид индикатора?

новый поток?лучший путь?

Спасибо!!

в частности, моя функция выглядит так

- (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];

        }
    }
}
Это было полезно?

Решение

Хорошо.Из приведенного выше фрагмента кода я вижу несколько проблем:

  1. Кажется, вы планируете дождаться завершения запроса, прежде чем отображать ячейку.В этом есть несколько отрицательных моментов:это раздражает пользователя и, скорее всего, приведет к зависанию пользовательского интерфейса на время отправки запроса (что может занять несколько секунд).
  2. Все происходит внутри willDisplayCell метод.

Вот как, я думаю, вам следует решить эту проблему:

  1. Have отобразит загрузку триггера ячейки асинхронно.
  2. Отобразите ячейку с надписью «Загрузка...» с помощью счетчика на ней (для вдохновения см. Tweetie 2).
  3. Дождитесь обратного звонка по вашей заявке
  4. Заполните свою модель ответом
  5. Удалить ячейку «Загрузка...»
  6. Принудительно перезагрузить ваши данные [tableView reloadData]

Это должно позволить вам достичь того, чего вы хотите.

Другие советы

Вы можете попробовать сделать это в ячейкаForRowAtIndexPath: метод UITableView

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top