0

我正在创建一个带有 sqlite 数据库的应用程序。我使用从 Web 服务检索到的信息更新数据库。我像这样从 AppDelegate 调用 Web 服务:

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

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

}

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

4

3 回答 3

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];
于 2012-12-14T09:20:41.733 回答
0

在您的每个视图控制器(或常见的超类视图控制器)中,监听UIApplicationDidBecomeActiveNotification应用程序激活时发送的通知。

这样,您可以为每个视图控制器自定义逻辑,而无需通过使用大量 if 将应用程序委托耦合到代码的其他部分(如果您需要区分哪个视图控制器是活动的)。

于 2012-12-14T10:20:06.283 回答
-1

因为您的视图层次结构可以采用任何形式,所以您必须自己跟踪当前可见的视图控制器。例外:如果您的应用程序中的所有内容都发生在 UINavigationController 中,您始终可以使用它获取当前视图控制器。

[navigationController topViewController];

但是,如果您需要做的只是呈现一个覆盖,您可以将该视图添加到根视图控制器的视图中;无论如何,所有子视图控制器都只是作为子视图呈现。

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

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

于 2012-12-14T09:20:21.070 回答