UINavigationController未显示Root View控制器

时间:2011-08-02 09:07:55

标签: iphone uiview ios4 uinavigationcontroller

我在视图中有一个大小为320x218的UIView(下面的代码中的menuView)。我想在此视图中加载导航控制器。我使用以下代码来做到这一点:

MenuViewController *menuController = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:menuController];
navigationController.navigationBarHidden = YES;

[menuView addSubview:navigationController.view];
[menuController release];
[navigationController release];

执行时,根视图不会显示在该视图中。仅显示导航栏,其余视图为空。

修改

我刚刚在MenuViewController的initWithNibName:和viewDidLoad中放置了一个NSLog()。 initWithNibName:中的那个被调用但viewDidLoad中的那个:不是:S

更新

我试图将menuController推到我的navigationController思考,因为它没有出现,它可能不在堆栈中。例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Pushing the same view controller instance more than once is not supported

4 个答案:

答案 0 :(得分:8)

调用layoutsubviews可以正常工作。

[super loadView];
[self.view addSubview:navigationController.view];
[navigationController.view layoutSubviews];

答案 1 :(得分:3)

我在这里找到了答案:

UIViewController -viewDidLoad not being called

我必须在-initWithRootViewController之后添加这些代码行才能加载我的根视图Controller的视图:

navigationController.navigationBarHidden = YES;
[navigationController setView:menuController.view];

答案 2 :(得分:0)

您不应将navigationViewController作为子视图添加到MenuViewController。 由于navigationViewController已经拥有MenuViewController。

只需显示navigationViewController。

答案 3 :(得分:0)

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.

ViewController *viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];

navController = [[UINavigationController alloc]initWithRootViewController:viewController];

self.window.rootViewController = self.navController;

在appdelegate方法中试用此代码