如何以编程方式显示/推动导航控制器
问题描述:
使用故事板,我可以让控制器向导航控制器显示/推入赛格。新的导航控制器将导航控制器设置为现有的导航控制器,并且新导航控制器的视图控制器将具有新的导航控制器作为其导航控制器。如果我尝试以编程方式推送导航控制器,它会失败。是否有任何修改导航控制器的视图控制器以便它们可以包含导航控制器的程序化方法?以下将不起作用:如何以编程方式显示/推动导航控制器
let aNavigationController = UIStoryboard(name: "OurStoryBoard", bundle: nil).instantiateViewControllerWithIdentifier("OurNavigationController") as OurNavigationController
navigationController!.pushViewControll(aNavigationController, animated: true)
答
NavigationControllers不互相推送。您可以将NavigationController替换为另一个,但不会涉及“推送”动画。
但是,您可以在同一个导航控制器上设置不同的视图控制器并具有动画。这些将取代导航控制器内现有的视图控制器。下面是一个例子来推一个视图控制器,并更换现有的视图控制器导航控制器内:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewControllerOne *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerOne"];
NSMutableArray *controllers = [NSMutableArray array];
[controllers addObject:vc1];
[yourAppNavigationController setViewControllers:controllers animated:YES];
如果要替换多个视图控制器当前视图控制器(S):
// 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];
再次,这涉及到您可能正在寻找的“推动”动画,并且它将取代现有的视图控制器,因此不会出现不希望的后退按钮(在第一个代码示例中为w/one VC)。
我认为你的意思可能是“编程式”而不是“务实”。你能否显示你所尝试过的代码,并描述你无法解决的具体问题?这个问题目前太含糊。 – 2015-02-24 14:48:19
交换让与var。你有任何错误? – Miknash 2015-02-24 15:11:23
NickCatib,没有效果。视图控制器和苹果库提供的大多数东西都是类而不是结构体。 let关键字意味着它不能被重新分配。它仍然可能发生变异。 – moger777 2015-02-24 15:23:04