调用presentModalViewController
和pushViewController
之间的区别是什么:
这是否能够从第一个推出的视图返回? Woooaaaaaa .....
我猜这种区别在于其他地方和更深层次。不是吗?
答案 0 :(得分:16)
忽略过渡/动画以及幕后事物的结构(aleph_null提供了很好的讨论),唯一面向用户的区别是能够使用导航栏自动返回上一个视图。
如果您使用pushViewController
,您将自动获得"返回"导航栏中的按钮。如果您使用presentModalViewController
则不需要,并且通常必须实现自己的控件和/或回调来处理解雇控制器。
从概念上讲,模态表示样式通常用于无法离开的原子任务(即,您要么完成任务,要么取消,并且在您执行其中之一之前,您无法在应用程序中执行任何其他操作)。
如果您想知道为什么首先会有差异,我无法说出来。就个人而言,我认为提供统一API以便从一个控制器移动到另一个控制器(如cocos2d或Android)的框架更有意义。
答案 1 :(得分:12)
最重要的区别在于语义。模态视图控制器通常表示用户必须提供某些信息或执行某些操作。此链接更深入地解释了它:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html
这是他们谈论的另一个不那么抽象的差异:
“当您呈现模态视图控制器时,系统会在执行演示的视图控制器和显示的视图控制器之间创建父子关系。具体来说,执行演示的视图控制器将其modalViewController属性更新为指向它呈现的(子)视图控制器。类似地,呈现的视图控制器更新其parentViewController属性以指向呈现它的视图控制器。“
答案 2 :(得分:2)
查看图片中的viewControllers
现在你必须问自己
我是否每次都需要始终显示登录+提交页面?即使他们上次登录,每次登录都会给用户带来痛苦。这两个屏幕确实不适合屏幕的自然流量。那么我们该怎么办?我们只是使用presentViewController
然而,对于其余的viewControllers,我们希望将它们保存在2个导航中,这样我们就可以轻松来回,因此我们使用pushViewController
答案 3 :(得分:1)
这就是我的经验所说,如果你想管理一个视图层次结构,最好去导航控制器中的pushViewController。它的工作方式类似于导航控制器中的一组视图控制器。但是,如果要求只是为了显示在父视图控制器上执行某些操作的视图,那么最好的方法是以模态方式呈现它。 如果你需要一个复杂的push pop逻辑,总是喜欢pushViewController。
答案 4 :(得分:0)
当您想要对数据进行某种分层表示(即向下钻取)时,会使用UINavigationController。他们使用一堆UIViewController子类工作。每次“向下钻取”时,只需将另一个视图控制器添加到堆栈中。然后,“后退”逻辑只是从堆栈弹出视图控制器的问题。
您可以查看此链接: http://www.icodeblog.com/2011/10/11/back-to-basics-an-introduction-to-view-controllers/