2013-01-17 98 views
0

我已經構建了我的加載視圖,現在看起來不錯。但我不能找出正確的時機顯示並刪除此loadingView。我使用一個NavigationController和我的初始RootViewController,它有一個UIButton。當按下UIButton時,會出現一個新的UIView,但這需要幾秒鐘的時間,因爲我正在從服務器加載一些文件。所以我想在這段時間顯示我的loadingView。我用的是prepareForSegue() - 方法還有我把代碼添加這樣如何正確實現加載屏幕

[self.navigationController.view addSubview:backgroundLoadingView]; 

,並在viewDidDisapperar我加載視圖我,就把這行代碼的

[backgroundLoadingView removeFromSuperview]; 

的效果是,當我按下UIButton幾秒鐘沒有任何事情發生(因爲加載文件)並且loadingView不會彈出(但我應該),新的ViewController出現,加載視圖彈出一秒並消失。 因此,它在我猜的正確時刻消失,但它沒有出現在正確的分娩中。我該如何處理這種情況?

編輯: 她的是我的prepareForSegue法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

{

if([segue.identifier isEqualToString:@"showPointsOnMap"]) 
{ 
    NSLog(@"Here is prepareForsegue()"); 
    [self.navigationController.view addSubview:backgroundLoadingView]; 
    [self prepareJSONData:[self getJSONData]]; 
    [segue.destinationViewController setPointArray:thePointArray]; 
} 

}如果你想顯示加載視圖,同時與服務器通信您應該添加到窗口不

+0

您是否阻止了網絡請求的主線程? –

回答

0

查看控制器..就像

UIWindow *window = [UIApplication sharedApplication].keyWindow; 

window addSubView:backgroundLoadingView]; 

[window bringSubviewToFront:backgroundLoadingView]; 
+0

我試着用窗口的解決方案,我把這個代碼放到了我的prepareForSegue-Method中,它的效果和上面描述的一樣。我還把一個NSLog() - Statement作爲prepareForSegue-Method中的第一行,當我按下我的按鈕時,這將被按次序執行,但第二行添加我的子視圖只有在secondViewController出現時纔會執行。 – user1895268

+0

我現在在viewDidloadMethod中添加了我的子視圖,看看'[self.navigationController.view]'是否是正確的視圖,我添加了我的子視圖,實際上是這樣。它看起來像預期的那樣不知所措,但它並沒有出現在prepareForSegue-Method中。那裏有什麼問題? – user1895268