2011-03-05 50 views
0

我有一个tabbar iPhone应用程序,其中tabbar是根控制器,每个选项卡启动一个单独的web视窗。每次用户点击其中一个选项卡时,我会拦截AppDelegate中的点按并执行操作,其中一个显示加载屏幕(图标在tabbar视图中,显示切换为TRUE/FALSE)。从不同的类调用的函数不能正常工作

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

我通过AppDelegate中定义iboutlets访问功能showLoading:

[hv showLoading]; 

而这正是它的作用:

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

我看到了 “showLoad 1” 栏后,立即被轻敲,但加载图像仅在didSelectViewController退出时显示。

我的问题 - 我怎样才能让加载屏幕出现从AppDelegate或有更好的方式来显示加载屏幕?

回答

2

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

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

嘿@尼古拉!感谢你的回答!它看起来像我需要的东西,但它似乎不工作,不知道为什么。我可以看到didSelectViewController退出后启动的函数,它立即调用showLoading,但加载图像只有在webview接收到要加载的新页面(函数的最后一步)后才会显示。任何想法为什么? – AragornSG 2011-03-05 17:31:27

+0

我想你是问题中所描述的问题的解决方案,所以我会接受它。我会在一个新问题中重新提出我的问题。 – AragornSG 2011-03-07 21:46:42

0

首先,你的tabbar应该由UITabBarController控制器而不是应用程序委托。有关实现细节,请参阅Xcode TabBar模板。其次,它听起来像是你想要的Application Startup Image。这是一个静态图像,如果您的应用程序需要一些时间启动,它就像启动屏幕一样工作。