我在视图中有一个大小为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
答案 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方法中试用此代码