【问题标题】:Popping viewcontroller and then back to RootViewController doesn't seem to work弹出 viewcontroller 然后回到 RootViewController 似乎不起作用
【发布时间】:2011-03-02 20:45:00
【问题描述】:

我有一个将四个视图控制器推送到堆栈上的应用程序。在第四个视图控制器中,我做了一个 PopViewController,所以我应该回到第三个视图控制器,在 viewWillAppear 方法中,我做了一个 PopToRootViewController。这不会让我正确地回到第一个视图控制器。代码很简单,只是一个

[self.navigationController pushViewController:nextController animated:YES]

在前 3 个视图控制器中的每一个中,在第四个中

[self.navigationController popViewControllerAnimated:YES].  

在第三个视图控制器中,我有一个 viewWillAppear 方法:

[self.navigationController popToRootViewControllerAnimated:YES].

当我浏览视图时,我得到以下信息:

启动应用:

         Back:               Title: FirstLevel

按确定:

         Back: FirstLevel    Title: SecondLevel

按确定:

         Back: SecondLevel   Title: ThirdLevel

按确定:

         Back: ThirdLevel    Title: FourthLevel

Press OK: 弹回 1 然后弹回 root:

         Back: FirstLevel    Title: ThirdLevel

如果我现在按确定:

         Back: ThirdLevel    Title: SecondLevel

如果这令人困惑,我很抱歉。我应该能够弹回一个视图控制器然后立即弹回根目录吗?

感谢您的帮助。

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    按照 Mark 的建议,您应该在第四个视图控制器中使用 -popToRootViewController,而不是第三个视图控制器,因为您的动机是将其弹出到根视图控制器。

    但是如果您出于某种匿名原因仍想实现此功能,那么在第三个视图控制器中,使用:

    [self.navigationController popToRootViewControllerAnimated:YES]viewDidAppear 方法中,而不是viewWillAppear

    我希望它有效:)

    【讨论】:

      【解决方案2】:

      似乎没有任何理由弹回视图控制器 3,因为您试图在视图控制器 3 的视图出现之前转到根目录。只需发送-popToRootViewControllerAnimated: 到视图控制器 4。

      【讨论】:

      • 我真正想做的是使用第四个视图控制器从用户那里获取一些信息。然后我解散了那个视图控制器,我可能需要也可能不需要获取更多信息。如果我有所有信息,那么我想回到根视图控制器;否则,我将推送另一个视图控制器以获取更多信息。我想我可以将信息传递给第四个视图控制器以推送第五个以获取更多信息等,然后在我拥有所需的一切后最终弹出到根目录。
      • 将调用放入 viewDidAppear 似乎工作正常,但是,我确实看到了另一个视图的实例,这看起来不是很专业。除了改变架构还有什么办法吗?
      • 从 UX 的角度来看,推送第 5 个控制器以获取更多信息不会让用户感到困惑。
      猜你喜欢
      • 1970-01-01
      • 2020-11-16
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      相关资源
      最近更新 更多