返回IOS中的根视图

对某些人来说,这听起来像是一个愚蠢的问题 我一直在搜索,发现很少,主要是因为我找不到合适的搜索词。

这里我想做的是:

该应用程序从视图A开始。

视图A启动视图B,视图B启动视图C.

它们是视图C直接返回A而不解除其自身并因此暴露B的方式。例如主菜单按钮。

你可以调用popToRootViewControllerAnimated:如果你有一个UINavigationController。 如果指定NO来为它设置动画,那么它将跳回到根而不先显示B.

我发现了解决问题的方法。 它有点脏,(我可能会因此而被火焰击落)但在测试中效果很好并且很快实现。 这是我如何做到的。

在我的应用程序中,我有一个名为GlobalVars的Singleton类(我使用它来存储各种全局设置)。 该类包含一个名为home_pressed和相关访问器的布尔值(通过Synthesis)。 如果您愿意,也可以将此值存储在应用程序委托中。

在具有主菜单按钮的每个视图控制器中,我将按钮连接到homePressed IBAction方法,如下所示。 首先将全局homePressed布尔值设置为YES ,然后以通常的方式解除视图控制器,但是没有动画。

 -(IBAction) homePressed: (id) sender { [GlobalVars _instance].homePressed = YES; [self dismissModalViewControllerAnimated: NO]; }//end homePressed 

在除主菜单之外的每个视图控制器中,我实现了viewDidAppear方法(在视图重新出现时调用),如下所示。

 -(void) viewDidAppear: (Bool) animated { if ([GlobalVars _instance].homePressed == YES) { [self dismissModalViewController: NO]; } else { //put normal view did appear code here/ } }//end viewDidAppead 

在作为应用程序根目录mainMenu视图控制器中,我在其视图中将全局homePressed布尔值设置为NO ,确实显示方法如下

 -(void) viewDidAppear: (Bool) animated { if ([GlobalVars _instance].homePressed == YES) { [GlobalVars _instance].homePressed == NO; } else { //put normal view did appear code here/ } }//end viewDidAppear 

在那里,这使我能够从链中的任何视图返回到我的应用程序的根主菜单。

我希望避免使用这种方法,但它比重新实现我的应用程序要好,如果我想使用UINavigationController解决方案,那就是我必须要做的。

很简单,花了我10分钟来编写我的9视图应用程序。 🙂

我有一个最后的问题,我的解决方案是否适合HIG?