2012-04-15 1 views
1

У меня есть ячейка таблицы, во время ее щелчка открывается другое представление таблицы, вы можете выбрать что-то в качестве значения ячейки представления таблицы. Проблема здесь в том, что данные во втором представлении таблицы большие, и загрузка займет много времени. Поэтому после того, как я нажму на ячейку, экран застынет там, что не является удобным для пользователя. Я хочу отобразить индикатор выполнения во время загрузки второго представления таблицы. Но я не могу найти хорошее место, чтобы добавить это. Мне интересно, в каком методе я должен добавить код, чтобы отобразить индикатор выполнения.Как отобразить индикатор выполнения во время загрузки другого вида таблицы с видом таблицы

ответ

1

Две вещи:

  1. Я бы серьезно рассмотреть другой вариант, а не индикатор, попробуйте, например, что-то вроде MBProgressHUD, он выглядит лучше, и он подходит для вашей цели.

  2. Для реализации этого, вы должны убедиться, что поток пользовательского интерфейса не застревает (и, следовательно, приложение не «замораживается») - это означает вызов процесса загрузки в фоновом потоке. Метод, который начинает процесс загрузки, должен запустить индикатор прогресса, и метод, который имеет дело с отображением загруженных данных (после его готовности), должен удалить его. Удачи!

2

насчет отображения UIActivityIndicator (sample image here) в аксессуар зрения UITableViewCell?

Вы можете поместить его с каким-то кодом ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.accessoryView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
} 

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

[self performSelectorInBackground:@selector(yourLongTakingMethod) withObject:nil]; 
0

Если ваше приложение замерзает, это означает, вы блокируете UIThread, например, @stavash. Индикатор выполнения - это просто анимированное изображение, оно не решит вашу проблему. То, что вы хотите сделать, это поместить ваш «код подготовки данных» в поток. Легким способом было бы использовать Grand Central Dispatch. Для начала посетите this tutorial. Вы можете пропустить первый тайм и сосредоточиться на реальных блоках потоков. API-интерфейсы: dispatch_queue_create, dispatch_async и dispatch_release.

Это не сделает индикатор выполнения. Однако он разблокирует ваш пользовательский интерфейс. Затем вы можете рассмотреть методы создания индикатора выполнения. Используйте встроенную или какую-то пользовательскую анимацию. Или даже предварительно загрузите данные в первом представлении таблицы с помощью фоновой задачи.

Смежные вопросы