2012-04-26 97 views
1

我有一個導航控制器(XCode4與故事板和ARC),其中segue連接到每個單獨的ViewController(其中7個)。通常,我在Nav控制器中點擊一行,將我帶到正確的場景。但是,有時候我想用場景從場景「A」到場景「C」,然後從「C」到「B」,這些場景沒有通過導航控制器放置在堆疊上。如何'彈出'到視圖控制器不在堆棧上

這是否有可能(從場景「C」到場景「B」)?

UPDATE:這是把控制器堆棧上的代碼:

EnterDataViewController *edvc = [[EnterDataViewController alloc]init]; 

NSMutableArray *ma = self.navigationController.viewControllers; 
[ma insertObject:edvc atIndex:1]; 
self.navigationController.viewControllers = ma; 
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex: 1] animated:YES]; 

回答

3

插入下方的頂部的一個分層結構中的新的視圖控制器,具有動畫關閉。然後,彈出。 :)

+0

哇!聽起來合乎邏輯....我在哪裏可以找到一份文檔或樣本或者關於如何做到這一點的教程? – SpokaneDude 2012-04-26 20:18:39

+1

我剛剛閱讀了'UINavigationController'文檔。 – 2012-04-26 20:19:13

+0

這似乎只處理導航堆棧上的項目...(http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html)。你在同一個地方看嗎? – SpokaneDude 2012-04-26 20:28:38

1

該堆棧是存儲在UINavigationController'sviewControllers屬性中的數組。使用它創建一個新的(可變的)數組,您可以只需insertObject:atIndex:1並將其分配回UINavigationController.viewControllers

+0

注意問題已更新的問題...按照您的建議添加了代碼,但它始終返回到導航控制器場景,而不是我想要的場景。 – SpokaneDude 2012-04-26 21:05:16

+0

ma = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];像你一樣離開休息。 – Mario 2012-04-27 13:07:03

+0

在[[ma insertObject:edvc atIndex:1];上生成錯誤; 'NSArray'沒有可見的@interface聲明選擇器'insertObject:atIndex:' – SpokaneDude 2012-04-27 22:33:15

0

將新控制器插入到self.navigationController.viewControllers並不總是按預期工作,所以我建議從數組中獲取所需的控制器,從頭開始構建一個新數組,然後將此數組分配給導航控制器。

UIViewController *mainScreenController = [[self.navigationController viewControllers]objectAtIndex:0]; 
SecondScreenController *secondScreenController = [[SecondScreenController alloc]init];  
NSMutableArray *controllers = [[NSMutableArray alloc]initWithObjects:mainScreenController, secondScreenController, nil];  
[self.navigationController setViewControllers:controllers animated:YES]; 
相關問題