这是我的代码:
ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil];
[self.navigationController presentModalViewController:vc animated:YES];
//[self setView:[vc view]];
如果我打电话,没有任何反应。但是,如果我将其更改为:
ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil];
//[self.navigationController presentModalViewController:vc animated:YES];
[self setView:[vc view]];
视图看起来很好(当然没有过渡)。 我究竟做错了什么?初始化视图控制器时是否有任何特殊需要处理?我试图尽可能多地从Apple的例子中复制,但我无法让它工作......
感谢您的任何意见!
- Ry
答案 0 :(得分:24)
您只能从已经在屏幕上显示的控制器(通常通过UINavigationController或UITabBarController)呈现模态视图控制器。尝试创建一个UINavigationController,将viewController推送到它,然后然后呈现你的模态控制器。 Xcode中有一个初学者项目,它展示了如果您不熟悉它,如何创建基于UINavigationController的流程。
还有一点需要注意:如果你没有将视图控制器推送到UINavigationController,那么.navigationController属性将为nil,并且它的消息传递将不起作用。
答案 1 :(得分:1)
我在尝试在另一个模态视图上显示模态视图时遇到了同样的问题。 Ben的回答是正确的,可以这样实现:
@interface FirstView: UIViewController {
UIViewController *firstView;
}
- (IBAction)showOptionsView:(id)sender;
@end
在主视图类中:
- (void)viewDidLoad {
[super viewDidLoad];
firstView = [[UIViewController alloc]init];
[firstView setView:self.view];
[firstView setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
}
- (IBAction)showOptionsView:(id)sender {
OptionsView *optView = [[OptionsView alloc]initWithNibName:@"OptionsView" bundle:nil];
if(firstView != nil) {
[firstView presentModalViewController:optView animated:YES];
[optView release];
}