1

Я хочу заменить кнопку обновления индикатором активности, когда пользователь нажимает кнопку обновления и после обновления таблицы я хочу изменить его, чтобы обновить кнопку. Но когда я нажимаю кнопку обновления, она не меняется на индикатор активности, но кнопка обновления подсвечивается до тех пор, пока перезагрузка данных не будет завершена.Замените UIBarButtonItem на UIActivityIndicatorView не работает

код выглядит следующим образом. Я что-то пропустил?

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

ответ

2

Вместо того чтобы писать

[self reloadNewsEnded]; 

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

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

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

+0

Большое спасибо. оно работает!!! – moon

0

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

[self reloadNewsEnded]; 

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

+0

благодарит за помощь. Я получил коды перезагрузки данных в (void) reloadNewsEnded. - (void) reloadNewsEnded {// перезагрузить процесс данных // переназначить кнопку обновления}, где я должен ждать? – moon

0

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