在主UIViewController上添加UINavigationController?

时间:2011-10-19 00:56:35

标签: iphone objective-c ipad uinavigationcontroller subview

我有一个标准的UIViewController工作魅力。但是,我想在其上添加一个UINavigationController作为子视图,随意添加和删除它。但是,似乎您不能简单地将另一个控制器作为子视图添加到当前控制器上。那我该怎么做呢?

感谢。

2 个答案:

答案 0 :(得分:1)

这里有一些代码可以在导航控制器中创建一个新视图并将其显示在“顶部”(以模态方式呈现)。

这里有一些关键的事情:

如果您以模态方式呈现导航控制器,则需要将其设置为左侧和右侧。在initWithRootController和presentModally

之前的右键(如果需要)

即使你当前的视图是在navController中,如果你以模态方式呈现它,它需要包装在UINavigationcontroller中(有一些SO帖子覆盖它)

UINavigationController with presentModalViewController

MyView *myView = [[MyView alloc] initWithNibName:@"MyView" bundle:nil];

UIBarButtonItem *cancelBtn = [[UIBarButtonImageItem alloc] init...  

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] init...

[[myView navigationItem] setLeftBarButtonItem:cancelBtn];
[[myView navigationItem] setRightBarButtonItem:doneBtn];  
[cancelBtn release];    
[doneBtn release];

// Edit purchase in full modal view.
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myView];

[[self navigationController] presentModalViewController:navController animated:YES];

然后,从您刚刚以模态方式呈现的视图中,您可以忽略它。例如,在此代码中,上面添加的保存和取消按钮与您提供的视图控制器上的这些IBAction方法相关联:

- (IBAction)cancel:(id)sender
{
    NSLog(@"cancel");
    [self dismissModalViewControllerAnimated:YES];
}

- (IBAction)save:(id)save
{
    NSLog(@"done");
    // do work here
    [self dismissModalViewControllerAnimated:YES];
}

答案 1 :(得分:0)

您可以添加另一个控制器 view 作为该viewcontroller的视图的

的子视图
[mainViewController addSubview:anotherViewController.view];

虽然在UINavigationController的情况下,虽然我不知道你在做什么,但这通常不是你想要做的事情。

你看过-(void)presentModalViewController:animated吗?