当你谈到推送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
如果您有 ViewControllers 的层次结构并且您需要推送包含导航控制器的视图控制器,步骤是:
1) 推送 ViewController,包含UINavigationController
.
要push 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。