presentViewController和UINavigationController之间的区别?

use*_*888 35 cocoa-touch objective-c uiviewcontroller ios

请告诉之间的区别presentViewControllerUiNavigationController?我可以使用presentViewController而不是UINavigationController在应用程序中导航不同的视图吗?是什么情况使用?

ser*_*gio 69

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

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

我认为这presentViewController最适合一次只显示一个视图控制器.你可以肯定地用它来堆叠更多的视图控制器一个在另一个上面(因此有点"模仿"一个穷人的导航控制器),但我的赌注是你会很快发现一些不按预期工作的东西.

具体来说,这种限制的一个例子如下:当您解雇模态视图控制器(为了"关闭"它)时,所有模态呈现的视图控制器(来自同一个呈现控制器)也将立即被解除.所以你根本无法实现"返回"/导航功能.

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

  • 很高兴有所帮助,但如果你发现它有用,别忘了接受答案! (2认同)

And*_*law 24

A UINavigationControllerUIViewController管理一堆视图控制器并添加后退按钮等的子类.

presentViewControllerUIViewController用于呈现模态视图控制器的类的方法.


小智 5

UINavigationController你保持一个导航堆栈.然后,您就可以浏览分层内容.

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

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

  • 如果我们使用presentViewController,你确定没有导航堆栈.如果您调用"dismiss__",您将导航到Previous viewController实例.这意味着两种方法都将维护导航堆栈. (3认同)