0

理解できない問題が 2 つあり、誰かが助けてくれることを願っています。

このコードは、既存の 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;

私の2番目の問題は、ユーザーが「戻る」ときにナビゲーションコントローラーをsplitViewControllerに復元することです。新しい UINavigationController を detailView に割り当てることはできますが、self.navigationController を割り当てることはできません。

問題は同じ問題だと思います。何らかの理由で、新しい UINavigationController は UIView の navigationController と同じではありません。なんで?

4

1 に答える 1

0

干渉するUIWindowことはあまり安全ではありません。

あなたが達成しようとしていることに応じて、2つのかなり単純なオプションを考えることができます

a) iOS 5.1+ にはRootViewController、スワイプ ジェスチャで分割と表示を表示/非表示にし、それを操作するオプションがあります。

b)UIViewControllerをエミュレートする独自のものを作成しUISplitViewController、必要に応じて左側の部分を非表示にします

于 2012-12-27T14:25:25.020 に答える