【问题标题】:iOS - pushViewController vs presentModalViewController differenceiOS - pushViewController 与 presentModalViewController 的区别
【发布时间】:2011-12-24 02:01:32
【问题描述】:
调用presentModalViewController 和pushViewController 有什么区别,当:
- animation 设置为 NO(即使是,也只是可以更改的动画样式)。
- 在呈现模态视图时定义了一个导航控制器,因此它也可以通过调用堆栈进行导航......
这只是为了能够从第一个推送视图返回吗?呜呜呜……
我想区别在别处和更深的地方。没有?
【问题讨论】:
标签:
ios
cocoa-touch
uinavigationcontroller
pushviewcontroller
presentmodalviewcontroller
【解决方案1】:
忽略过渡/动画以及幕后事物的结构(aleph_null 的 alswer 提供了很好的讨论),唯一面向用户的区别是能够使用导航栏自动返回到前一个视图。
如果您使用pushViewController,您将在导航栏中自动获得一个“返回”按钮。如果您使用presentModalViewController,则不需要,通常必须实现自己的控件和/或回调来处理解除控制器。
从概念上讲,模态演示样式通常用于您无法离开的原子任务(即,您要么完成任务,要么取消,并且在您执行其中一项之前,您无法在应用程序中执行任何其他操作)。
如果您想知道为什么首先会有差异,我不能说。就我个人而言,我认为为从一个控制器移动到另一个控制器(如 cocos2d 或 Android)提供统一 API 的框架更有意义。
【解决方案3】:
查看图片中的 viewControllers
- 左上角的前 2 个视图控制器(登录和提交)与 tabBarController 和 NavigationController断开
- 其余的 viewController 嵌入在 NavigationController 中。它们在某种程度上属于应用的自然流程。
现在你得问问自己了
我是否需要每次都显示登录 + 提交页面?即使用户上次登录,每次登录都会很痛苦。这两个屏幕确实不适合屏幕的自然流动。那么我们该怎么办?我们只是使用presentViewController 模态添加它们
但是对于其余的 viewController,我们希望将它们保留在 2 个导航中,以便我们可以轻松地来回移动,所以我们使用pushViewController
有关更多信息,我建议您查看此video
这张图片也是从this很好的答案中挑选出来的。值得一看。
【解决方案4】:
这就是我的经验,如果你想管理视图的层次结构,最好在导航控制器中使用 pushViewController。它就像导航控制器中的一堆视图控制器一样工作。但是,如果要求只是显示在父视图控制器上执行某些操作的视图,那么最好的方法是以模态方式呈现它。
如果您需要复杂的推送弹出逻辑,请始终使用 pushViewController。