在哪里添加活动指标视图?

时间:2012-12-17 17:02:32

标签: ios xcode ios6 uiactivityindicatorview activity-indicator

我有两个视图控制器 - 我只需将它们称为A和B,以帮助您轻松理解。

视图控制器有一个按故事板链接到B的按钮(不是手动编码的)。并且,B视图控制器在viewDidLoad方法中从DB服务器检索一堆json数据。因为检索json数据需要一些时间,所以我需要添加一个活动指示器,让用户知道它做了什么 - 而不是冻结。但是,我不太确定我应该在哪里添加活动指示器视图。

如果你在我的鞋子里,你会在哪里添加它?

3 个答案:

答案 0 :(得分:2)

使用普通界面构建器将其放置在您希望看到的位置,并将hidesWhenStopped变量设置为YES,以便在您获取数据后看不到它。然后告诉它在你的JSON回调中停止。

在设计方面,“完成的事情”是把它放在正在加载的任何东西的中间。对于图像,这将是图像显示的中间位置。对于表格,您可以在屏幕中间或空的“占位符”单元格中查找大型活动指示符。想一想用户的眼睛会去哪里试图看到他们想要的数据,这就是他们应该看到指标的地方。

答案 1 :(得分:1)

我会在标题中使用带有消息的警报视图,然后向警报添加子视图,这是活动指示器。

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Doing something\nPlease Wait..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[alertView show];
indicator.center = CGPointMake(alertView.bounds.size.width / 2, alertView.bounds.size.height - 50);
[alertView addSubview:indicator];
[indicator startAnimating];

稍后代码解雇...

[alert dismissWithClickedButtonIndex:0 animated:YES];

答案 2 :(得分:1)

如果你在viewDidLoad中有一个阻塞调用会导致UI在移动到B之前冻结在A上,所以我建议在A上添加活动指示器。虽然你可能会注意到由于对数据库的阻塞调用,你的阻止调用之前的UI更改也会被冻结,您将看不到任何UI更改。

我通常处理这个问题的方法是为阻塞调用生成一个新线程,从而释放UI的主线程,然后在必要时添加一个活动指示器(在A或B上取决于设计,但我建议在在这种情况下,B来自可用性POV)。

为了避免自己管理这一切的麻烦,我通常最终会使用像MBProgressHUD或类似的库这样容易管理的东西。