我正在开发一个应用程序,用户可以通过UIAlertView
确认某些操作,如果他确认,我调用一个处理操作的方法,然后我准备弹出我在的视图返回调用该方法后的另一个视图。
我想显示UIActivityIndicatorView
,如果用户按下确认,只要执行该方法并转到其他视图即可。我在正确的位置使用了startAnimating
和stopAnimating
,但我从来没有看到显示的用户界面UIActivityIndicatorView
,而不是一秒钟。
我猜它与UIAlertView
引起的一些UI问题有关,但不确定我是否正确。我只需要了解如何正确使用UIActivityIndicatorView
方法执行时间。
我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self.activityIndicator.alpha = 1.0;
self.activityIndicator.hidesWhenStopped = YES;
self.activityIndicator.center = self.view.center;
[self.view addSubview:self.activityIndicator];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(buttonIndex == 1) {
[self.activityIndicator startAnimating];
ContactsTableViewController *contactTableView = [self getContactsTVC];
[contactTableView applyActionOnCells];
// doing some setup before poping off to the root view controller of my nav controller
[self.activityIndicator stopAnimating];
// then go to rootViewController
[self.navigationController popToRootViewControllerAnimated:YES];
}
}
答案 0 :(得分:1)
我不是百分百肯定,但尝试发表评论stopAnimating
,看看它是否显示出来。
如果有帮助,applyActionOnCells
可能会阻止你的主线程(所有UI内容也会发生)并且指针在你再次隐藏之前永远不会有机会出现。
在这种情况下,请尝试在后台进行applyActionOnCells
调用:
if(buttonIndex == 1) {
[self.activityIndicator startAnimating];
__block typeof(self) bself = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ContactsTableViewController *contactTableView = [bself getContactsTVC];
[contactTableView applyActionOnCells];
dispatch_async(dispatch_get_main_queue(), ^{
[bself.activityIndicator stopAnimating];
// then go to rootViewController
[bself.navigationController popToRootViewControllerAnimated:YES];
});
});
}
修改:另请参阅an earlier question。