使用故事板,我可以让控制器有一个显示/推送segue到导航控制器。然后,新的导航控制器将navigationController设置为现有的导航控制器,新导航控制器的视图控制器将新的导航控制器作为其导航控制器。如果我尝试以编程方式推送导航控制器,它会失败。是否有任何编程方式修改导航控制器的视图控制器,以便它们可以包含导航控制器?以下内容不起作用:
let aNavigationController = UIStoryboard(name: "OurStoryBoard", bundle: nil).instantiateViewControllerWithIdentifier("OurNavigationController") as OurNavigationController
navigationController!.pushViewControll(aNavigationController, animated: true)
答案 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)。