Вопрос

Я хочу заменить кнопку обновления с индикатором активности, когда пользователь нажимает кнопку «Обновить», и после обновления TABLEVIVE я хочу изменить его обратно, чтобы обновить кнопку. Но когда я нажимаю кнопку обновления, она не изменилась на индикатор активности, но кнопка обновления выделена до тех пор, пока передача данных не закончится.

Код как ниже. Я что-то пропустил?

-(void) reloadNewsStarted{        
UIActivityIndicatorView *activityIndicatorRightBarItem = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicatorRightBarItem startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicatorRightBarItem];
[activityIndicatorRightBarItem release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];

[self reloadNewsEnded];
}

-(void) reloadNewsEnded {

//reload data process

UIBarButtonItem *reloadNewsBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadNewsStarted)];
reloadNewsBtn.style = UIBarButtonItemStyleBordered;
self.navigationItem.rightBarButtonItem = reloadNewsBtn;
[reloadNewsBtn release];  }
Это было полезно?

Решение

Вместо написания

[self reloadNewsEnded];

Пожалуйста, напишите

[NSThread detachNewThreadSelector:@selector(reloadNewsEnded) toTarget:self withObject:nil];

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

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

Почему эта линия в конце reloadNewStarted метод

[self reloadNewsEnded];

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

Изменение кнопки не будет вступить в силу до тех пор, пока цикл выполнения не рекомендуется контроль от вашего кода. Похоже, ваша операция перезагрузки синхронно и блокирует очередь событий, что не позволит так, чтобы произойти. Если ваша обработка принимает заметное количество времени, вам необходимо использовать фоновую нитью или асинхронную обработку на главной петле запуска (например, с помощью NSURLConnection для управления сетевой задачей и обратными вызовами), так что вы не блокируете.

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