2011-03-05 71 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。這是一個靜態圖像,如果您的應用程序需要一些時間啓動,它就像啓動屏幕一樣工作。