2012-08-12 63 views
0

類似於這個問題:Adding subview, gets delayed? 但我不認爲你可以pushViewController在一個單獨的線程,所以這真的不可能?添加一個子視圖不顯示之前pushViewController

這裏是我想要做的事:

我有一個TableView中,當按一個單元格,我想打電話給

[self.view addSubview:LoadingView] 

顯示與微調的疊加。然後我打電話

self.navigationController.navigationBar.hidden = NO; 
[self.navigationController pushViewController:newGameViewController animated:YES]; 

然而,子視圖僅顯示一秒鐘(在等待發生小區選擇1-4秒後〜新的ViewController初始化)。

有沒有什麼辦法可以在單元格被選中的瞬間獲得某種加載指標?

+0

我不知道如果我理解你的權利。你是否想延遲加載新的視圖控制器,只是延長了微調器顯示的時間? – 2012-08-12 16:20:29

+0

這也可以工作..問題是新的視圖控制器從我的服務器訪問數據,這需要幾秒鐘 - 留下用戶在一個沒有反應,沒有更新的視圖。我想在他們按下按鈕的瞬間顯示加載程序,以便他們知道發生了什麼;) – 2012-08-12 16:23:30

回答

1

好的。那這個呢。在didSelectRowAtIndexPath中啓動您的微調器(通過addSubview ...)並開始從服務器加載您的東西。如果完成刪除微調控制器,將新的視圖控制器推入堆棧。確保用戶在此期間不能觸摸任何其他單元。順便一提。從用戶角度來看,如果新控制器立即加載並顯示一些等待消息,我會發現它非常直觀。

1

或者相反:newGameViewController顯示微調器並開始在後臺線程中從服務器加載數據。數據完成後,移除微調器並顯示數據。這樣,如果用戶不想等待,用戶甚至可以返回。

+0

其實..我意識到我決定通過我的appDelegate推送哪個視圖控制器,它無法將子視圖添加到視圖中(我是一個ios/objective c noobie所以原諒我,如果我說錯了) – 2012-08-12 16:39:03

1

在推送newGameViewController之前,您不需要添加代碼。

在newGameViewController的viewDidLoad中,寫下顯示微調框的代碼。要獲取更新的UI,只需在調用Web API之前插入延遲。

內GameViewController.m

-(void) viewDidLoad 
{ 
    [self.view addSubview:LoadingView]; 
    [self performSelector:@selector(callWebAPI) afterDelay:0.1]; 
} 

-(void) callWebAPI 
{ 
    //Handle network activity here.. 
} 
+0

所以我們有同樣的想法:-)但我不會使用performSelector:withObject:afterDelay:因爲選擇器將在主線程上執行並且運行時阻止用戶界面。 – 2012-08-12 17:48:31

+0

是的..你也可以在bkg線程中調用你的web API .. – Apurv 2012-08-12 17:50:32

相關問題