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]; 
相关问题