【发布时间】:2010-09-18 01:58:43
【问题描述】:
为什么导航应用程序使用pushViewController 而不是presentModalViewController 像所有其他应用程序一样?如何修改导航应用程序以改用presentModalViewController?这样做会不是最理想的吗?为什么?
【问题讨论】:
标签: objective-c cocoa-touch xcode uiviewcontroller
为什么导航应用程序使用pushViewController 而不是presentModalViewController 像所有其他应用程序一样?如何修改导航应用程序以改用presentModalViewController?这样做会不是最理想的吗?为什么?
【问题讨论】:
标签: objective-c cocoa-touch xcode uiviewcontroller
导航视图控制器和模态视图控制器用于不同的目的。第一个用于显示分层嵌套内容。当您请求有关项目的更详细信息时,您会在层次结构中深入,将更详细的视图推送到堆栈上。
模态视图仅用于在当前视图上显示一个视图。它对于您的应用的信息按钮之类的东西很有用。
【讨论】:
您的问题有点像问为什么UISplitViewControllers 使用两个控制器并将它们的视图并排放置。也就是说,UINavigationControllers 使用pushViewController: 来管理他们的UIViewController 实例堆栈,因为这就是Apple 决定UINavigationControllers 应该工作的方式。当动画进入视图时,推送的视图将从右侧滑入,而旧视图在弹出视图时从左侧滑入。
UIViewController 的任何实例都可以使用presentModalViewController 在其自己的视图之上显示另一个UIViewController 的视图,以防止用户与下面的视图交互。根据设备(iPhone、iPad)的不同,您可以为新呈现的视图的视觉外观和用于将其引入视图的动画提供各种选项。
没有什么能阻止你编写一个应用程序,它只是让一个视图使用presentModalViewController 调出下一个视图,但没有理由使用UINavigationController 这样做。我从未检查过内存消耗是否存在有意义的差异,或者您可以衡量的任何其他事情,以从技术角度判断这样做是否“次优”,但这肯定不是常态,因此可能是次优的用户体验的角度。对于您的应用而言,这是否正确取决于用户是否认为交互对他们有意义。
【讨论】:
导航视图控制器使用堆栈的概念。您的导航存储在堆栈中,这就是您可以推送和弹出视图的原因,这表明您可以将它们用于详细视图 ....创建视图层次结构
而模态视图控制器一次只显示一个视图......这通常用于应用程序中的新流程。
【讨论】: