2011-07-05 14 views
8

私のアプリではUINavigationControllerを実装しています。スタックにプッシュされているのは、いくつかのUIViewControllersです。UINavigationController StackでいくつかのView Controllerを「ポップ」する

私が最後に到達したら、最初のUIViewControllerを除くすべてのUIViewControllerがポップされるようにしたいと思っています。それ、どうやったら出来るの?

私は最後のものをポップする方法を理解していますが、以前のものもすべて破棄するように指示するにはどうすればよいですか?

答えて

22

UINavigationController classのメッセージpopToRootViewControllerAnimated:popToViewController:animated:popViewControllerAnimated:を試すことができます。コードは、次のこと役に立つことができ、その後、本当にアイリーンにより示唆されるようpopToRootViewcontrollerAnimated:を使用するように便利ですが、誰かがコントローラの正確な数をポップする必要がある場合は、あなたの場合は

+0

+1、 'popToRootViewControllerAnimated:'が彼が探しているものです。 – sergio

+0

これは、スタック上のビューコントローラをアンロードしません...私はそれをしたい場合は何が必要ですか? – SuperString

9

- (void) popControllersNumber:(int)number 
{ 
    if (number <= 1) 
     [[self navigationController] popViewControllerAnimated:YES]; 
    else 
    { 
     NSArray* controller = [[self navigationController] viewControllers]; 
     int requiredIndex = [controller count] - number - 1; 
     if (requiredIndex < 0) requiredIndex = 0; 
     UIViewController* requireController = [[[self navigationController] viewControllers] objectAtIndex:requiredIndex]; 
     [[self navigationController] popToViewController:requireController animated:YES]; 
    } 
} 
3

使用

TravelViewController *travelView = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-3]; 
[self.navigationController popToViewController:travelView animated:YES]; 
+0

この回答が大好き! –

関連する問題