从不同类调用的函数无法正常工作

时间:2011-03-05 13:05:06

标签: objective-c cocoa-touch ios4

我有一个tabbar iPhone应用程序,其中tabbar是根控制器,每个选项卡都启动一个单独的webview窗口。每次用户点击其中一个标签时,我会拦截AppDelegate中的点击并执行操作,其中一个操作正在显示加载屏幕(标签栏视图中的图像,显​​示切换为TRUE / FALSE)。

我的问题是,加载屏幕仅在AppDelegate中的所有操作完成时显示,这几乎违背了它的目的。我的猜测是我在设计这个解决方案时遇到了一些根本性的错误,但在iPhone编程方面缺乏经验,我不知道如何修复它。

我正在通过AppDelegate中定义的iboutlet访问showLoading函数:

[hv showLoading];

这就是它的作用:

- (void) showLoading
{
    loadingView.hidden = FALSE;
    wheelHome.hidden = FALSE;
    [wheelHome startAnimating];
    NSLog(@"showLoad 1");
}

点击栏后我立即看到“showLoad 1”,但只有当didSelectViewController退出时才会显示加载图片。

我的问题 - 如何从AppDelegate中显示加载屏幕还是有更好的方式来显示加载屏幕吗?

2 个答案:

答案 0 :(得分:2)

问题是,只有在事件处理代码返回到运行循环时才会更新UI。您有两种选择:

  1. 准备好长时间运行的任务(设置用户界面),然后按[myDownloader persormSelector:@selector(download) withObject:nil afterDelay:0];启动任务。使用performSelector:withObject:afterDelay:的好处是你的代码返回到运行循环,有时间更新UI,然后立即启动任务。
  2. 设计长时间运行的任务(下载,...),以便它们在后台执行。

答案 1 :(得分:0)

首先,您的tabbar应该是UITabBarController的控制器,而不是app委托。有关实现的详细信息,请参阅Xcode TabBar模板。

其次,听起来你想要Application Startup Image。这是一个静态图像,如果你的应用需要一点时间启动,它就像一个启动画面。