Индикатор активности не начинает анимироваться, когда контроллер представления переходит к другому контроллеру представления

#iphone #uinavigationcontroller #uiactivityindicatorview

#iPhone #uinavigationcontroller #uiactivityindicatorview

Вопрос:

В настоящее время я запускаю индикатор активности перед нажатием другого контроллера представления, но он не начинает анимировать индикатор активности.

 [activityindicator startanimating];

[self.navigationcontroller pushviewcontroller:viewcontroller animated:YES];

[activityindicator stopanimating];
  

Комментарии:

1. Я думаю, что анимация нажатия выполняется слишком быстро, чтобы показать анимацию, и вы немедленно останавливаете ее. Следовательно, вы не можете это заметить

Ответ №1:

Создайте NSThread как вызов селектора следующим образом :

 [NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];  
// Some code  
[spinner stopAnimating];  
[self.navigationcontroller pushviewcontroller:viewcontroller animated:YES];  
  

threadStartAnimating :

 -(void)threadStartAnimating:(id)data  
{  
[spinner startAnimating];  
}  
  

Комментарии:

1. Выполнение этого (ну, с dispatch_async и приоритетной очередью по умолчанию) сработало для меня, но я не уверен, почему это так. Черт возьми, есть идеи, почему ваше решение работает?

Ответ №2:

Попробуйте этот код:

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

[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;    

[self performSelector:@selector(navigatetodeals) withObject:nil afterDelay:.5];

}
-(void)navigatetodeals
{

    yourViewController *d = [[yourViewController alloc]initWithNibName:@"yourView" bundle:nil];

[self.navigationController pushViewController:yourViewController animated:YES];


}
  

Ответ №3:

Вам нужно использовать performSelectorInBackground или что-то в этомроде. Поскольку вы используете вызовы в методе 1, пользовательский интерфейс не получает возможности обновить его, поэтому вы не видите activityindicator.

Итак, для вашего случая:

 [activityindicator startanimating];  [self.navigationcontroller pushviewcontroller:viewcontroller animated:YES];
[self performSelectorInBackground:@selector(stopAnimating) :nil];
  

затем создайте метод, подобный:

 -(void)stopAnimating
{
[activityindicator stopanimating];
}
  

Вы могли бы использовать режим ожидания или что-то еще (например, sleep (1)), чтобы показать activityindicator, потому что просто показывать их при нажатии view не получится, потому что это делается в кратчайшие сроки…

Надеюсь, это поможет!