【发布时间】:2012-01-27 15:01:47
【问题描述】:
对于某些人来说,这听起来像是一个愚蠢的问题。我四处搜索,发现很少,主要是因为我找不到合适的搜索词。
这里我想做的是:
应用程序从视图 A 开始。
视图 A 启动视图 B,视图 B 启动视图 C。
这是视图 C 直接返回 A 而不会关闭自身从而暴露 B 的一种方式。例如主菜单按钮。
【问题讨论】:
标签: ios root viewcontroller
对于某些人来说,这听起来像是一个愚蠢的问题。我四处搜索,发现很少,主要是因为我找不到合适的搜索词。
这里我想做的是:
应用程序从视图 A 开始。
视图 A 启动视图 B,视图 B 启动视图 C。
这是视图 C 直接返回 A 而不会关闭自身从而暴露 B 的一种方式。例如主菜单按钮。
【问题讨论】:
标签: ios root viewcontroller
如果你有 UINavigationController,你可以调用popToRootViewControllerAnimated:。如果您指定NO 对其进行动画处理,那么它将直接跳回根目录而不首先显示B。
【讨论】:
我找到了解决问题的方法。它有点脏,(我可能会因为它而被击落)但在测试中工作得很好并且实施起来非常快。以下是我的做法。
在我的应用程序中,我有一个名为 GlobalVars 的 Singleton 类(我用它来存储各种全局设置)。这个类包含一个名为 home_pressed 的布尔值和相关的访问器(通过综合)。如果您愿意,也可以将此值存储在应用程序委托中。
在每个带有主菜单按钮的视图控制器中,我将按钮连接到 homePressed IBAction 方法,如下所示。首先将全局 homePressed 布尔值设置为 YES,然后以通常的方式关闭视图控制器,但使用 NO 动画。
-(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 视图控制器中,它是应用程序的 root,我将全局 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 吗?
【讨论】: