Ios 在何处添加活动指示器视图?

Ios 在何处添加活动指示器视图?,ios,xcode,ios6,uiactivityindicatorview,activity-indicator,Ios,Xcode,Ios6,Uiactivityindicatorview,Activity Indicator,我有两个视图控制器-我将简单地称它们为A和B,以帮助您轻松理解 视图控制器有一个按钮,该按钮通过情节提要链接到B(非手动编码)。并且,B视图控制器以viewDidLoad方法从DB服务器检索一组json数据。因为检索json数据需要一些时间,所以我需要添加一个活动指示器,让用户知道它正在做什么,而不是冻结。但是,我不太确定应该在哪里添加activity indicator视图 如果您处于我的位置,您会将其添加到哪里?使用普通界面生成器将其定位在您希望看到的位置,并将hidesWhenStoppe

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

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


如果您处于我的位置,您会将其添加到哪里?

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


在设计方面,“做的事情”是把它放在任何正在装载的东西的中间。对于图像,这将是图像显示的中间位置。对于一张表格,你可能会在屏幕中间找到一个大的活动指示器,或者在一个空的占位符单元上。想一想用户的眼睛将移动到哪里去尝试并看到他们想要的数据,这就是他们应该看到指示器的地方。

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

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

在设计方面,“做的事情”是把它放在任何正在装载的东西的中间。对于图像,这将是图像显示的中间位置。对于一张表格,你可能会在屏幕中间找到一个大的活动指示器,或者在一个空的占位符单元上。想一想用户的眼睛将移动到哪里去尝试并查看他们想要的数据,这就是他们应该看到指示器的地方。

我将使用标题中带有消息的警报视图,然后向警报添加一个子视图,即活动指示器

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

我将使用标题中带有消息的警报视图,然后向警报添加一个子视图,即活动指示器

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

如果您在viewDidLoad中有一个阻塞调用,这将导致UI在移动到B之前冻结在a上,因此我建议在a上添加活动指示器。尽管您可能会注意到,由于对DB的阻塞调用,您的UI会在阻塞调用冻结之前立即更改,您不会看到任何UI更改

我通常的处理方法是为阻塞调用生成一个新线程,从而释放UI的主线程,然后在必要时添加一个活动指示器(在a或B上取决于设计,但我建议从可用性角度在B上显示它)


为了避免自己管理所有这些的麻烦,我通常会使用类似或类似的库,这样更容易管理

如果您在viewDidLoad中有一个阻塞调用,这将导致UI在移动到B之前冻结在a上,因此我建议在a上添加活动指示器。尽管您可能会注意到,由于对DB的阻塞调用,您的UI会在阻塞调用冻结之前立即更改,您不会看到任何UI更改

我通常的处理方法是为阻塞调用生成一个新线程,从而释放UI的主线程,然后在必要时添加一个活动指示器(在a或B上取决于设计,但我建议从可用性角度在B上显示它)


为了避免自己管理所有这些的麻烦,我通常会使用类似或类似的库,这样更容易管理

有趣的视图组合:)我应该在视图控制器中这样做,让人们知道下一页正在加载吗?抱歉,如果我不理解您的问题,但在我看来,在视图中,加载在b中是您编写代码进行查找的地方,如果是这样,我会同意其他建议,即您将其放在另一个thred中以释放主ui线程。然后,我会在该线程之前添加此代码。然后,在执行线程后,您可以使用选择器调用可以删除此视图的方法。有趣的视图组合:)我应该在视图控制器中这样做以让人们知道正在加载下一页吗?抱歉,如果我不理解您的问题,但在我看来,在视图中D加载在b中是您编写代码的地方,并且如果所以我同意另一个建议,你们把它放在另一个thred中,以释放主ui线程。然后,我会在该线程之前添加此代码。然后,在执行线程后,您可以使用选择器调用可以删除此视图的方法。因此。。。我想在加载B视图控制器之前显示指示器。这是否意味着我必须在视图控制器中执行此操作?如果是这样,我应该用哪种方法编写代码?因为按钮是通过故事板链接的,我没有定制的方法或东西:/抱歉,我从来没有使用过故事板,但根据我的经验,最好的办法是确保视图控制器B尽快加载(即在数据输入之前),并使活动指示灯在那里旋转,直到收到数据。在不深入细节的情况下,这可能首先涉及视图控制器B发出请求(以便它能够处理回调),因此A将提供B发出该请求所需的任何信息。现在我了解了这个概念。谢谢:)所以。。。我想在加载B视图控制器之前显示指示器。这是否意味着我必须在视图控制器中执行此操作?如果是这样,我应该用哪种方法编写代码?因为按钮是通过故事板链接的,我没有定制的方法或东西:/抱歉,我从未使用过故事板,但根据我的经验,最好的办法是确保