2012-12-14 32 views
0

活跃的viewController添加子视图我创建和SQLite数据库的应用程序。我使用从Web服务检索的信息更新数据库。我打电话从AppDelegate中的Web服务这样的:从AppDelegate中

-(void)applicationDidBecomeActive:(UIApplication *)application{ 

    // get new information from web service 
    // update sqlite database 

} 

的web服务,可能需要相当长的时间,所以我想添加一个UIActivityIndicatorView到任何viewController处于活动状态。当然,更新完成后将其删除。 想法?

回答

0
- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 420, 480)]; 
    testView.backgroundColor = [UIColor redColor]; 
    [self.window.rootViewController.view addSubview:testView]; 
} 

然后,每当你完成这样做:

[testView removeFromSuperview]; 
+0

为什么所有的答案downvoted? –

+0

不知道。这太棒了! – Michael

-1

由于您的视图层次可以采取任何形式,跟踪当前可见视图控制器是你必须做你自己。例外情况:如果一切都在你的应用程序一个UINavigationController内发生,你总是可以得到这个当前视图控制器。

[navigationController topViewController]; 

如果你需要做的就是目前的覆盖,但是,你可以添加视图到根视图控制器的视图;无论如何,所有子视图控制器都只是以子视图呈现。

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
[self.window.rootViewController.view addSubview:activityIndicator]; 
[activityIndicator startAnimating]; 

虽然这样手动将视图投入到混音中并不是很优雅。我会考虑在发生各种网络事件时发布通知,并让每个视图控制器适当地更新自己。

0

在每个视图控制器(或公用超类视图控制器)的监听,当应用变得活跃,正在发送UIApplicationDidBecomeActiveNotification通知。

这种方式可以为每个视图控制器定制逻辑而无需使用大量的IFS(如果需要区分哪个视图控制器是处于活动状态)的应用程序代理耦合到代码的其他部分。