presentModalViewController无法正常工作

时间:2010-03-21 15:16:43

标签: iphone uiviewcontroller

这是我的代码:

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

2 个答案:

答案 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];
}