4

我有一個應用程序,它的rootview是一個菜單,用戶可以通過選擇一個加載另一個子視圖的單元格來設置搜索查詢的4個tableviews,所以基本結構看起來像這樣從導航控制器彈出多個視圖

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

但父視圖搜索參數之一requiers另一個子視圖被推到導航堆棧因此它看起來就像

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) 

我想知道如果有退流行的方式從這個子視圖到父視圖.. 我知道你可以彈出單個視圖或彈出回rootview,但在這種情況下,我想彈出兩個子視圖...這可能嗎?

回答

11

UINavigationViewController

popToViewController:動畫:

入時視圖控制器,直到指定的視圖控制器是在導航堆棧的頂部。

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

使用self.parentViewController.parentViewController來獲取祖父母viewController。 – 2012-01-12 01:25:17

+0

沒錯,所以我認爲這會從堆棧中彈出,直到它到達指定的視圖控制器。非常感謝! – 2012-01-12 01:29:26

2

您可以向UINavigationController添加一個類別,以允許一次彈出多個控制器。

的UINavigationController + VariablePop.h

#import <UIKit/UIKit.h> 

@interface UINavigationController (VariablePop) 

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

@end 

的UINavigationController + VariablePop.m #進口 「的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]; 
相關問題