2015-02-24 98 views
1

使用故事板,我可以讓控制器嚮導航控制器顯示/推入賽格。新的導航控制器將導航控制器設置爲現有的導航控制器,並且新導航控制器的視圖控制器將具有新的導航控制器作爲其導航控制器。如果我嘗試以編程方式推送導航控制器,它會失敗。是否有任何修改導航控制器的視圖控制器以便它們可以包含導航控制器的程序化方法?以下將不起作用:如何以編程方式顯示/推動導航控制器

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

navigationController!.pushViewControll(aNavigationController, animated: true) 
+0

我認爲你的意思可能是「編程式」而不是「務實」。你能否顯示你所嘗試過的代碼,並描述你無法解決的具體問題?這個問題目前太含糊。 – 2015-02-24 14:48:19

+0

交換讓與var。你有任何錯誤? – Miknash 2015-02-24 15:11:23

+0

NickCatib,沒有效果。視圖控制器和蘋果庫提供的大多數東西都是類而不是結構體。 let關鍵字意味着它不能被重新分配。它仍然可能發生變異。 – moger777 2015-02-24 15:23:04

回答

0

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)。

相關問題