从任何UIViewcontroller返回主菜单

时间:2012-01-13 21:29:56

标签: objective-c ios4 uiviewcontroller uinavigationbar

我想知道是否有任何方式可以从UIViewController返回,例如向后退3-4步,我有一个主屏幕,可以通过UIViewController导航到其他presentModalViewController,在下一个视图中,它将有一个UINavigationBar,它将导航到4-5级深度。我想放一个让用户直接回到家中的按钮,而无需返回他输入的所有视图。

提前thx。

3 个答案:

答案 0 :(得分:1)

让根级别视图控制器注册为通知的观察者,例如“POP_TO_ROOT”。当它收到此通知时,调用一个方法来关闭你的模态视图控制器(或堆栈中的第一个)。

在你的viewcontroller堆栈中,任何4或5级视图都可以发布通知“POP_TO_ROOT”。

编辑:添加代码

在调用presentModalViewController之前,在主“屏幕”中,执行以下操作:

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(handlePopToRoot) 
                                                 name:@"POP_TO_ROOT"
                                               object:nil];

并添加此方法:

 - (void) handlePopToRoot {
     [[NotificationCenter defaultCenter] removeObserver:self 
                                                   name:@"POP_TO_ROOT" 
                                                 object:nil];
     [self.navigationController dismissModalViewControllerAnimated: YES]; 
 }

然后,深入你的viewcontroller层次结构,当你想要一直弹出时,  你只需要发布通知:

 [[NSNotificationCenter defaultCenter] postNotification:@"POP_TO_ROOT" object:nil];

答案 1 :(得分:0)

将根视图控制器保存在某个属性中并调用:
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated

答案 2 :(得分:0)

如果我正确理解了您的问题,您将从“主视图控制器”模式呈现导航控制器(附有根视图控制器),并且您希望能够返回到“主视图控制器” ”

因为您将始终拥有指向导航控制器的指针,所以您应该可以调用 来自任何视图控制器的dismissModalViewControllerAnimated:,它将直接返回主视图控制器。

    [[self.navigationController parentViewController] dismissModalViewControllerAnimated:YES]