UINavigationController疯了吗?

时间:2012-12-27 14:14:28

标签: ios

我有两个我不理解的问题,希望有人可以提供帮助。

此代码不适用于从分割视图控制器获取现有UINavigationController层次结构并使用它接管屏幕。我只是一个黑屏

UINavigationController* myself = self.navigationController;
[myself removeFromParentViewController];

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"QuestionnaireViewController"];
[myself pushViewController:controller animated:YES];

AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
app.window.rootViewController = myself;

但是,此代码确实有效。为什么我可以将rootViewController设置为新的UINavigationController而不是self.navigationController?

UINavigationController *navController = [[UINavigationController alloc] init];
UINavigationController* myself = self.navigationController;
[myself removeFromParentViewController];
navController.viewControllers = myself.viewControllers;

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"QuestionnaireViewController"];
[navController pushViewController:controller animated:YES];

AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
app.window.rootViewController = navController;

我的第二个问题是当用户“返回”时将导航控制器恢复到splitViewController。我从经验中知道我可以为detailView分配一个新的UINavigationController,但是我不能分配self.navigationController。

我认为问题是同一个问题。由于某种原因,新的UINavigationController与UIView的navigationController不同。为什么呢?

1 个答案:

答案 0 :(得分:0)

干预UIWindow不是很安全。

根据你想要达到的目标,我可以想到2个相当简单的选项

a)iOS 5.1+可以选择显示/隐藏分割的RootViewController并使用滑动手势显示,并使用

b)创建自己的UIViewController,模仿UISplitViewController,并在需要时隐藏左侧部分