2012-04-17 93 views
1

我試圖在我的應用程序中創建一個活動指示器。我正在使用故事板,並創建了一個推動另一個視圖的按鈕。iOS 5:addSubview的奇怪行爲

這是我如何打開另一種觀點認爲:

- (IBAction)openView { 
    NSLog(@"View is loading"); 
    @try { 
     UINavigationController *nav = [storyboard instantiateViewControllerWithIdentifier:@"viewOpenSegue"]; 
     [nav setModalPresentationStyle:UIModalPresentationFullScreen]; 
     [self presentModalViewController:nav animated:YES]; 
    } 
    @catch (NSException *exception) { 
     NSLog(@"Error"); 
    } 
    @finally { 
     NSLog(@"View loaded"); 
    } 
} 

萬物好爲止。在視圖被打開之前我得到了日誌,並且在完全加載之後獲得了第二個日誌。

但是,當我想使用addSubview方法,我有一個奇怪的行爲。

NSArray *subviewArray2 = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil]; 
loadingView = [subviewArray2 objectAtIndex:0]; 

這就是我如何加載我的觀點。我添加/刪除像這樣:

[self.view addSubview:loadingView]; 
//@try block 
//@catch block 
//@finally 
{ 
[loadingView removeFromSuperview]; 
} 

我期望視圖出現和消失在屏幕上。但是,在推出的視圖出現之前,似乎有1毫秒的時間,然後突然消失。

如果我在viewDidLoad下添加這種方式,它會出現。

我看過類似的問題,但他們沒有幫我。任何人都有線索?我應該嘗試別的嗎?

在此先感謝。

+0

我很好奇 - 爲什麼您使用@嘗試/ @ catch塊? – SomaMan 2012-04-17 17:38:28

+0

,因爲我認爲這是檢測活動邊界的最佳解決方案。它顯示加載(應該...),嘗試時,如果有任何最後,給出錯誤,刪除加載面板。 – kubilay 2012-04-17 17:42:29

回答

0

這是因爲我沒有使用selector。請參閱this question

這裏的優化代碼:

[self.view addSubview:loadingView]; 
[self performSelector:@selector(openView) withObject:nil afterDelay:0]; 
0

這個nib文件View.xib有文件所有者嗎?

+0

它的確如此。就像我說的,我沒有任何問題,當我加載viewDidLoad ... – kubilay 2012-04-17 16:50:34

0

它發生是因爲第一個viewdidload執行比viewdidapper方法。 viewdidappear每次加載或者彈出視圖的時候都要加載,所以如果你想在視圖加載的第一個時刻執行它,你可以在viewdidload中寫下你的代碼。

+0

我不想加載第一次,我想加載後,我點擊一個按鈕。所以我在 - (IBAction)openView函數下編寫代碼。如果我在viewDidLoad下使用它,它已經加載第一次,如果稍後嘗試,它不會加載。 – kubilay 2012-04-17 17:17:18

+0

在推視圖出現之前像1毫秒出現然後突然消失? – freelancer 2012-04-17 17:24:50

+0

這並不重要。問題在於它在新視圖打開時不顯示。 – kubilay 2012-04-17 17:28:10