2012-01-13 37 views
0

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

thx提前。

回答

1

让您的根级别视图控制器注册为通知的观察者,例如“POP_TO_ROOT”。当它收到这个通知时,调用一个方法来解除你的模式视图控制器(或者任何第一个在堆栈中)。

在您的视图控制器堆栈中,任何视图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]; 
} 

然后向下深入您的视图控制器层次结构中,当您想要弹出所有方式时,您只需发布一个公告通货膨胀:

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

我没有得到您的解决方案,您可以发布一些代码以向我清楚吗? – Scar 2012-01-13 22:25:23

+0

感谢您的快速回复,并感谢您的代码之间,我不使用导航控制器,我只是使用[自我presentModelViewController:Viewname动画:是]; – Scar 2012-01-13 22:45:35

0

保存你的根视图控制器的某些属性,并呼吁:
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated

+0

我的主菜单是不是根控制器,所以我不能使用新的细节self.navigationController – Scar 2012-01-13 22:05:48

+0

更新的答案。 – OdNairy 2012-01-14 00:10:58

0

如果我理解你的问题正确,你是呈现导航控制器(带连接到它的根视图控制器)从你的“主视图控制器“,你希望能够回到你的”主视图控制器“。

因为您将始终有指向您的导航控制器的指针,您应该能够从任何视图控制器中调用 dismissModalViewControllerAnimated:,并且它会将您带回到主视图控制器。

[[self.navigationController parentViewController] dismissModalViewControllerAnimated:YES] 
+1

这会让我回到一个观点,我想让它回到例如4视图。 – Scar 2012-01-13 22:06:22