4

rootviewは、別のサブビューを読み込むセルを選択して検索クエリを設定するために使用する4つのテーブルビューのメニューですので、基本的な構造は次のようになりますナビゲーションコントローラから複数のビューをポップする

Root View 
- Parent View (search view) 
--Sub View (user selects variables here to fill search parameters of the parent view 

しかし、それは

Root View 
- Parent View (search view) 
--Sub View (user selects variables here to fill search parameters of the parent view 
---Sub View (related values to the previous subview i.e. Model/sub model) 

ようになりますので、親ビューの検索パラメータの一つは、ナビゲーションスタックにプッシュする別のサブビューをrequiers私は戻ってポップする方法があるかどうかを知りたいですこのサブビューから親ビューに移動します。 私はあなたが単一のビューをポップするか、rootviewにポップバックすることができますが、この機会に2つのサブビューをポップしたいのですが...これは可能ですか?

答えて

11

UINavigationViewController

popToViewController:アニメーションは:指定されたビューコントローラは、ナビゲーションスタックの最上位になるまで

ポップは、コントローラを表示します。

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated 
+1

self.parentViewController.parentViewControllerを使用して、祖父母のviewControllerを取得します。 –

+0

そうですね、これは、指定されたviewcontrollerに達するまでスタックからのビューをポップすることになります。どうもありがとう! –

2

あなたは、複数のコントローラーを一度にポップすることができるようにUINavigationControllerにカテゴリを追加することができます。

UINavigationController + VariablePop.h

#import <UIKit/UIKit.h> 

@interface UINavigationController (VariablePop) 

- (NSArray *)popViewControllers:(int)numPops animated:(BOOL)animated; 

@end 

UINavigationController + VariablePop.m の#import "UINavigationController + VariablePop.h"

@implementation UINavigationController (VariablePop) 

- (NSArray *)popViewControllers:(int)numPops animated:(BOOL)animated { 
    NSMutableArray* returnedControllers = [NSMutableArray array]; 
    int indexToPopTo = self.viewControllers.count - numPops - 1; 
    for(int i = indexToPopTo+1; i < self.viewControllers.count; i++) { 
     UIViewController* controller = [self.viewControllers objectAtIndex:i]; 
     [returnedControllers addObject:controller]; 
    } 
    UIViewController* controllerToPopTo = [self.viewControllers objectAtIndex:indexToPopTo]; 
    [self popToViewController:controllerToPopTo animated:YES]; 
    return returnedControllers; 
} 

@end 

そしてビューコントローラからのことができます。 :

NSArray* poppedControllers = [self.navigationController popViewControllers:2 animated:YES]; 
関連する問題