【问题标题】:difference between presentViewController and UINavigationController?presentViewController 和 UINavigationController 的区别?
【发布时间】:2012-12-23 08:53:15
【问题描述】:

请说出presentViewControllerUiNavigationController 的区别?我可以使用presentViewController 而不是UINavigationController 来导航应用程序中的不同视图吗? 分别使用什么场景?

【问题讨论】:

  • 请考虑对其中一些答案进行评分,如果它们对您有任何帮助,谢谢。

标签: ios objective-c cocoa-touch uiviewcontroller


【解决方案1】:

presentViewController 提供了一种机制来显示所谓的模态视图控制器;即,一个视图控制器将通过叠加在呈现控制器之上来完全控制您的 UI。

UINavigationController 提供了一种更灵活的机制,您可以在其中推送一个新控制器,然后将其弹出,以便以有序的方式返回到前一个控制器。想象一下,导航控制器中的控制器只会构建一个从左到右的序列。

我认为presentViewController 最适合一次只出现一个 视图控制器。您当然可以使用它来堆叠更多的视图控制器(因此有点“模仿”穷人的导航控制器),但我敢打赌,您很快就会发现某些东西无法按预期工作。

具体而言,此类限制的一个示例如下:当您关闭模态视图控制器(为了“关闭”它)时,所有模态呈现的视图控制器(来自同一个呈现控制器)也将在一次。因此,您根本无法实现类似“返回”/导航的功能。

所以,这取决于你想做什么。

【讨论】:

  • 太棒了!感谢您简洁准确的回答!
  • 很高兴能提供帮助,但如果您觉得有用,请不要忘记接受答案!
  • @sergio:我正在学习 iOS。我也有同样的问题。据我所知,presentViewController/dismiss 也维护一个导航堆栈。 UINavigationController 和 presentViewController-dismiss 方法都一次只支持 1 个视图控制器可见(呈现)。所以看来你的答案不是很清楚。对不起,如果这个疑惑是错误的。
  • 谢谢,我希望在解释仅使用 1 个视图的问题时,我改写了我的答案以使其更清楚。
【解决方案2】:

UINavigationControllerUIViewController 的子类,用于管理视图控制器堆栈并添加后退按钮等。

presentViewControllerUIViewController 类的一个方法,用于呈现模态视图控制器。

【讨论】:

  • 您可以隐藏导航栏,在这种情况下,导航控制器的作用与模态演示相同,不是吗?两者都维护一个堆栈——一个模态呈现的控制器可以模态呈现另一个控制器,从而产生一个堆栈。因此,模态表示和导航控制器之间的区别似乎并不像您的回答所说的那么清楚。
【解决方案3】:

UINavigationController 为您维护一个导航堆栈。然后,您可以浏览分层内容。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

如果您使用UIViewControllers presentViewController 方法,您基本上只是在替换视图控制器。没有为您维护导航堆栈。

【讨论】:

  • 如果我们使用presentViewController,你确定没有导航堆栈。如果您调用“dismiss__”,您将导航到上一个 viewController 实例。这意味着这两种方法都将维护导航堆栈。
  • presentViewController 不会替换之前的视图控制器。当您关闭呈现的视图控制器时,旧控制器将在那里。此外,正如 Loc 所说,一个模态呈现的控制器可以反过来呈现另一个模态,产生一个堆栈。
【解决方案4】:

UINavigationController是一个类,presentViewController是UIViewController(iOS 5+)的一个实例方法,UINavigationController是一个子类。

pushViewController 是与 presentViewController 类似的方法。它是 UINavigationController 的一个实例方法,适用于 iOS 2 +

【讨论】:

  • 请解释这两种方法的优缺点,而不仅仅是每个方法属于哪个类。
猜你喜欢
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
相关资源
最近更新 更多