36

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

4

4 回答 4

74

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

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

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

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

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

于 2013-01-09T10:33:12.943 回答
25

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

presentViewControllerUIViewController您用来呈现模态视图控制器的类的方法。

于 2013-01-09T10:29:48.823 回答
5

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

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

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

于 2013-01-09T10:29:53.927 回答
3

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

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

于 2013-01-09T10:26:08.967 回答