2012-03-13 20 views
10

在我們的iOS應用程序中有三個UIViewController s,我們希望根據某些條件跳過中間一個,直接從第一個到第三個。但是,用戶應該能夠通過第三個控制器上的「後退」按鈕返回到第二個。有條件地在iOS 5應用程序中使用UINavigatonController跳過UIViewController

我試過[self performSegueWithIdentifier:@"segueId" sender:sender];viewDidLoad,viewWillAppear,但這樣會破壞導航欄,如調試日誌所示。從viewDidAppear調用該代碼可以正常工作,但第二個視圖已經顯示出來了,這正是我首先想要避免的。

我也試過[self.navigationController pushViewController:vc animated:NO];但結果是同樣損壞的導航欄,即使這次調試日誌沒有這樣的條目。

這樣做的支持方式是什麼(如果可能的話)?

目標是iOS4的iPhone4,開發環境是Xcode 4.3。

回答

8

我在應用程序中使用以下代碼。完全按照預期工作。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    SecondViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
    if (indexPath.row == 0) { 
     // skip second vc 
     ThirdViewController *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ThirdViewControllerViewController"]; 
     [self.navigationController pushViewController:secondVC animated:NO]; 
     [self.navigationController pushViewController:thirdVC animated:YES]; 
    } 
    else { 
     // push second vc 
     [self.navigationController pushViewController:secondVC animated:YES]; 
    } 
} 
+0

非常感謝您的回覆。爲了能夠以這種方式實現它,看起來控制器不應該需要前一個數據。現在,在我們的應用程序中,每個控制器在'prepareForSegue'期間爲後續控制器準備相關數據(基於用戶選擇)。這就是爲什麼我在尋找能夠讓我「跳過」的東西(例如,就像自動執行賽格一樣)。你給了我一個思考想法。讓我研究一下,看看我是否可以將這個想法融入到應用程序中。 – alokoko 2012-03-13 23:04:37

+0

有一些洗牌涉及,但我得到它的工作。我仍然希望有某種方式可以在視圖出現之前「跳過」(也許通過segue或其他方式),在同一控制器內工作。 – alokoko 2012-03-13 23:58:54

+0

我忘了提到的一個細節:跳過後的第三個控制器上的後退按鈕標記爲「後退」,而不是第二個控制器的標題,因爲它將按照正常順序進行。這應該手動設置? – alokoko 2012-03-14 00:04:42

2

如果你想跳過一個視圖控制器,你可以叫UINavigationController setViewControllers:animated:它將動畫所提供的數組中的最後一個控制器,用戶將能夠「背」指出,棧。

您可以用任何你喜歡的方式構建視圖控制器數組;也許從現有的視圖控制器陣列開始:

NSMutableArray* newViewControllers = [[navController.viewcontrollers mutablecopy] autorelease]; 

[newViewControllers addObject: ...]; 

[navController setViewControllers: newViewControllers animated: YES]; 
+0

謝謝。當需要深入修改堆棧和/或在更復雜的情況下時,這會很有用。按照其他海報建議的順序推送視圖控制器工作正常。 – alokoko 2012-03-13 23:58:21

相關問題