在iPad上,我正在使用-presentModalViewController:animated:
显示一个viewController,然后该viewController也通过调用-presentModalViewController:animated:
来显示第二个模态viewController。
问题是第二个viewController似乎没有加载它的NIB。查看调试器,所有UIView元素都设置为nil,并且-viewDidLoad
不会被调用。
但是,如果我直接从第一个UIViewController转到第二个对话框,NIB会正确加载。根据Apple文档,应该可以推送多个UIViewControllers(请参阅-dismissModalViewControllerAnimated:
对连续加载的多个模态UIViewControllers的讨论)。
下面是我调用第二个模态UIViewController的代码(第一个使用基本相同的代码调用)。 dialog.delegate
基于Apple用于Utility 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 :(得分:0)
我弄清楚问题是什么......
第一个viewController正在显示一个文档类型窗口,并在其-viewDidLoad
方法中告诉第二个对话框出现。因为他们都使用动画效果,他们踩着彼此的脚趾,第二个viewController永远不会正确加载。
答案是在初始化对话框之前使用-performSelector:withObject:afterDelay:
延迟一秒。