2012-01-13 88 views
1

我想添加一个UINavigationController到我的应用程序信息视图(不是我的主视图)。我看过/阅读了很多教程,展示了如何使用IB通过AppDelegate将其添加到主窗口。在我的情况下,我只希望它出现在用户按下信息按钮并被带到infoView。这里是我我MainViewController内切换到InfoView的:将UINavigationController添加到主视图以外的视图

- (IBAction)infoButtonPress:(id)sender 
{ 
    // Create pointer to instance of InfoViewController 
    InfoViewController *infoView = [[InfoViewController alloc] initWithNibName:@"InfoViewController" bundle:nil]; 
    // Add view switching animation 
    infoView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    // Change view using animation 
    [self presentModalViewController:infoView animated:YES];  
} 

此时将显示InfoView的,我想这是对的UINavigationController的RootView。我尝试添加该行:

UINavigationController *infoNavController = [[UINavigationController alloc] 
              initWithRootViewController:infoView]; 

创建InfoViewController的实例后,应用程序崩溃。是否有可能将UINavigationController添加到除主视图以外的视图?

谢谢。

+1

崩溃日志说什么?那条线应该没问题。然后,您应该将infoNavController作为模式视图控制器呈现,而不是呈现infoView本身。 – 2012-01-13 19:25:09

+0

哦..所以我把infoView的第二行和第三行改为infoNavController。这确实奏效,谢谢。这样做,我必须以编程方式编辑NavigationBar吗?还是我仍然可以使用IB? – 2012-01-13 19:39:51

+0

在这种情况下,编程方式将是最简单的,除非您要从XIB加载整个导航控制器。 – 2012-01-13 19:42:22

回答

1

您与您的实施非常接近。按此顺序尝试。

InfoViewController *infoView = [[InfoViewController alloc] initWithNibName:@"InfoViewController" bundle:nil]; 
UINavigationController *infoNavController = [[UINavigationController alloc] 
              initWithRootViewController:infoView]; 
[infoView release]; // skip this if using ARC 
infoView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:infoNavController animated:YES]; 

UPDATE

要杀死这个模式,你将有你的按钮添加到主模式的看法。

InfoViewController.m 

-(void)cancel:(id)sender { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    UIBarButtonItem *cancelButton = 
    [[UIBarButtonItem alloc] initWithTitle: @"Cancel" 
            style: UIBarButtonItemStylePlain 
            target: self 
            action: @selector(cancel:)]; 
    self.navigationItem.leftBarButtonItem = cancelButton; 
    [cancelButton release]; 
} 
+0

好的。现在,因为这个UINavigationController是在我的MainViewController中创建的,我怎么能用它来说'[infoNavController pushViewController:AboutViewController];'从幻灯片InfoViewController中的Info视图关闭视图? – 2012-01-13 20:05:08

+0

这会将您的infoView放入navigationView中。如果您想推送其他视图,则需要单独推送它们或从您刚刚创建的navigationView中推送它们。如果您希望下一个视图从导航视图中滑过,只需分配/初始化新视图并按下,就像您的评论一样。 – 2012-01-13 20:18:55

+0

对不起,如果您要将新视图推入堆栈,您可以从rootViewController执行此操作,该问题将来自InfoViewController。它应该工作正常。 – 2012-01-13 20:21:42

相关问题