2010-11-16 81 views
0

在iPad上,我使用-presentModalViewController:animated:顯示一個viewController,然後viewController通過調用-presentModalViewController:animated:顯示第二個模式viewController。IBOutlets在presentModalViewController之後無視圖並加載視圖:animated:

問題是第二個viewController不會加載它的NIB。查看調試器,所有UIView元素都設置爲零,並且-viewDidLoad不會被調用。

但是,如果我直接從第一個UIViewController進入第二個對話框,則NIB會正確加載。根據Apple文檔,推送多個加載的UIViewControllers應該是可能的(請參閱-dismissModalViewControllerAnimated:針對連續加載的多個模式UIViewController的討論)。

下面是我調用第二個模態UIViewController的代碼(第一個使用基本相同的代碼調用)。 dialog.delegate基於Apple用於實用flipSideController示例代碼的相同代碼,並且僅用於通知父級對話已準備好關閉。

- (void) displayNewGameDialog { 
    NewGameDialog * dialog; 

    if (iPadDevice) { 
     dialog = [[NewGameDialog alloc] initWithNibName:@"NewGameDialog-iPad" 
               bundle:nil]; 
     dialog.modalPresentationStyle = UIModalPresentationFormSheet; 
    } else { 
     dialog = [[NewGameDialog alloc] initWithNibName:@"NewGameDialog" 
               bundle:nil]; 
    } 

    dialog.delegate     = self; 
    dialog.modalTransitionStyle  = UIModalTransitionStyleCrossDissolve; 
    dialog.player     = self.player; 

    [self presentModalViewController:dialog animated:YES]; 
    [dialog autorelease]; 
} 
+0

你如何聲明iPadDevice?它是一個實例變量? – griotspeak 2010-11-16 21:09:20

+0

我使用此功能兌現該結果作爲一個實例變量: – 2010-11-17 01:53:57

+0

- (BOOL)iPadDevice { 如果([[的UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)]){ 回報([的UIDevice currentDevice] .userInterfaceIdiom == UIUserInterfaceIdiomPad ); } return NO; } – 2010-11-17 01:54:15

回答

0

我想通了什麼問題了...

第一的viewController是顯示文檔類型的窗口,並在其-viewDidLoad方法我說的是第二個對話框出現。因爲它們都使用動畫效果,所以它們踩在其他腳趾上,第二個viewController從未正確加載。

答案是在對話框初始化之前使用-performSelector:withObject:afterDelay:延遲一秒。