Navigation Controller のプッシュについて話すときは、それを提示したいと考える可能性が最も高いでしょう。
- UINavigationControllerの紹介
これは最も一般的な方法であり、ほとんどの場合に実行したい方法です。UINavigationController
プッシュすることはできません。新しいルート ビュー コントローラーでのみ提示できます。
MyViewController* vc = [[MyViewController alloc]
initWithNibName:@"MyController" bundle:nil];
UINavigationController *myNav = [[UINavigationController alloc] initWithRootViewController: vc];
[self presentViewController:myNav animated:YES completion:nil];
ここで行うことは、最初に を作成し、UINavigationController
必要に応じUIViewController
てそのルート コントローラーとして設定することです。
- UINavigationControllerのプッシュ
ViewController の階層があり、Navigation Controller を含む View Controller をプッシュする必要がある場合の手順は次のとおりです。
1) を含む ViewController をプッシュしUINavigationController
ます。
をプッシュする UINavigationController
には、まず のサブクラスを作成しますUIViewController
。これは、あなたUINavigationController
とそのコンテンツのラッパー/コンテナ クラスになります。
ContainerViewController* vc = [[ContainerViewController alloc] init];
2) UINavigationController を子ビュー コントローラーとして追加する
viewDidLoad
コンテナー (インスタンス化したばかり) に、次のようなものを追加するだけです。
Objective-C
UINavigationController* myNav = [[UINavigationController alloc] initWithRootViewController: rootViewController];
[myNav willMoveToParentViewController:self];
myNav.view.frame = self.view.frame; //Set a frame or constraints
[self.view addSubview:myNav.view];
[self addChildViewController: myNav];
[myNav didMoveToParentViewController:self];
スウィフト 4.2+
let childNavigation = UINavigationController(rootViewController: viewController)
childNavigation.willMove(toParent: self)
addChild(childNavigation)
childNavigation.view.frame = view.frame
view.addSubview(childNavigation.view)
childNavigation.didMove(toParent: self)
ここで行うことは、基本的にナビゲーション コントローラーをインスタンス化し、それを子コントローラーとしてラッパーに追加することです。それでおしまい。UINavigationController のプッシュに成功しました。