【问题标题】:pushViewController and Navigation Applications?pushViewController 和导航应用程序?
【发布时间】:2010-09-18 01:58:43
【问题描述】:

为什么导航应用程序使用pushViewController 而不是presentModalViewController 像所有其他应用程序一样?如何修改导航应用程序以改用presentModalViewController?这样做会不是最理想的吗?为什么?

【问题讨论】:

    标签: objective-c cocoa-touch xcode uiviewcontroller


    【解决方案1】:

    导航视图控制器和模态视图控制器用于不同的目的。第一个用于显示分层嵌套内容。当您请求有关项目的更详细信息时,您会在层次结构中深入,将更详细的视图推送到堆栈上。

    模态视图仅用于在当前视图上显示一个视图。它对于您的应用的信息按钮之类的东西很有用。

    【讨论】:

    • 我可以使用模态视图比一个视图更深入。
    • 但这并不意味着你应该
    • 有你不应该这样做的理由吗?
    • 如果你想让你的视图有一种关闭按钮,让用户对界面感到舒适,你将不得不创建一个导航控制器以模态方式推送,并创建一个 UIBarButtonItem 进入它的酒吧。因此,每次您更深入地以模态方式将视图控制器推到彼此之上时,您都必须创建一个“虚拟” UINavigationController 来按住一个按钮。这听起来像是一个奇怪的情况。听起来您正在使用这样一个事实,即每个视图控制器都可以保存一个模式来创建一个已经由导航控制器实现的堆栈。这就是为什么你应该这样做
    【解决方案2】:

    您的问题有点像问为什么UISplitViewControllers 使用两个控制器并将它们的视图并排放置。也就是说,UINavigationControllers 使用pushViewController: 来管理他们的UIViewController 实例堆栈,因为这就是Apple 决定UINavigationControllers 应该工作的方式。当动画进入视图时,推送的视图将从右侧滑入,而旧视图在弹出视图时从左侧滑入。

    UIViewController 的任何实例都可以使用presentModalViewController 在其自己的视图之上显示另一个UIViewController 的视图,以防止用户与下面的视图交互。根据设备(iPhone、iPad)的不同,您可以为新呈现的视图的视觉外观和用于将其引入视图的动画提供各种选项。

    没有什么能阻止你编写一个应用程序,它只是让一个视图使用presentModalViewController 调出下一个视图,但没有理由使用UINavigationController 这样做。我从未检查过内存消耗是否存在有意义的差异,或者您可以衡量的任何其他事情,以从技术角度判断这样做是否“次优”,但这肯定不是常态,因此可能是次优的用户体验的角度。对于您的应用而言,这是否正确取决于用户是否认为交互对他们有意义。

    【讨论】:

      【解决方案3】:

      导航视图控制器使用堆栈的概念。您的导航存储在堆栈中,这就是您可以推送和弹出视图的原因,这表明您可以将它们用于详细视图 ....创建视图层次结构

      而模态视图控制器一次只显示一个视图......这通常用于应用程序中的新流程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多