如何以编程方式显示/推送导航控制器

时间:2015-02-24 14:44:40

标签: ios objective-c swift

使用故事板,我可以让控制器有一个显示/推送segue到导航控制器。然后,新的导航控制器将navigationController设置为现有的导航控制器,新导航控制器的视图控制器将新的导航控制器作为其导航控制器。如果我尝试以编程方式推送导航控制器,它会失败。是否有任何编程方式修改导航控制器的视图控制器,以便它们可以包含导航控制器?以下内容不起作用:

let aNavigationController = UIStoryboard(name: "OurStoryBoard", bundle: nil).instantiateViewControllerWithIdentifier("OurNavigationController") as OurNavigationController

navigationController!.pushViewControll(aNavigationController, animated: true)

1 个答案:

答案 0 :(得分:0)

NavigationControllers不会互相推动。您可以将NavigationController替换为另一个,但这不会涉及"推送"动画。

但是,您可以在同一个导航控制器上设置不同的视图控制器并拥有动画。这些将替换导航控制器内的现有视图控制器。以下是推送一个View Controller并替换导航控制器内任何现有视图控制器的示例:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewControllerOne *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerOne"];
NSMutableArray *controllers = [NSMutableArray array];
[controllers addObject:vc1];
[yourAppNavigationController setViewControllers:controllers animated:YES];

如果要用多个视图控制器替换当前视图控制器:

// 1.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FirstViewController *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
SecondViewController *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
ThirdViewController *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"ThirdViewController"];

// 2.
NSMutableArray *controllers = [NSMutableArray array];
[controllers addObject:vc1];
[controllers addObject:vc2];
[controllers addObject:vc3];

// 3.
[yourAppNavigationController setViewControllers:controllers animated:YES];

同样,这涉及"推动"您可能正在寻找的动画,它取代了现有的视图控制器,因此不会成为不需要的后退按钮(在第一个代码示例中,带有一个VC)。

相关问题