【问题标题】:Return to root view in IOS返回 IOS 中的根视图
【发布时间】:2012-01-27 15:01:47
【问题描述】:

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

这里我想做的是:

应用程序从视图 A 开始。

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

这是视图 C 直接返回 A 而不会关闭自身从而暴露 B 的一种方式。例如主菜单按钮。

【问题讨论】:

    标签: ios root viewcontroller


    【解决方案1】:

    如果你有 UINavigationController,你可以调用popToRootViewControllerAnimated:。如果您指定NO 对其进行动画处理,那么它将直接跳回根目录而不首先显示B。

    【讨论】:

    • 我正在尝试 [self.navigationController popToRootViewControllerAnimated: NO];在主菜单按钮触发的 IBAction 事件存根中。它似乎没有任何效果,但在执行时不会引发错误。
    • 好的,第一个问题你有一个 UINavigationController 并将你的视图(通过他们自己的视图控制器)推送到堆栈上吗?每个视图控制器都有一个 navigationController 属性,但它可能被设置为 nil。
    • 查看developer.apple.com/library/ios/#documentation/uikit/reference/… 看看这是否是您要重现的效果。
    • 当我启动我正在使用的视图时 [self presentModalViewController: exportMenu animated: YES]。看来 self.navigation 控制器为空。
    • 好的,所以您在其他模态视图控制器之上呈现模态视图控制器,对吗?如果您能更详细地解释您正在尝试创建的效果,那将会很有帮助,以便我可以为您提供更好的建议。
    【解决方案2】:

    我找到了解决问题的方法。它有点脏,(我可能会因为它而被击落)但在测试中工作得很好并且实施起来非常快。以下是我的做法。

    在我的应用程序中,我有一个名为 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
    

    ma​​inMenu 视图控制器中,它是应用程序的 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 吗?

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多