#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 не получится, потому что это делается в кратчайшие сроки…
Надеюсь, это поможет!