为什么“现在的模态视图控制器”?

时间:2011-04-25 05:55:54

标签: iphone cocoa-touch ios modalviewcontroller

对模态视图控制器的使用感到好奇。何时以及为什么要使用它们?有指导方针吗?

我发现示例核心数据手册代码创建了一个导航控制器,只是为了呈现一个模态视图控制器。那是为什么?

   UINavigationController *navController = [[UINavigationController alloc] 
                                                 initWithRootViewController:addViewController];

    [self.navigationController presentModalViewController:navController 
                               animated:YES];

这是否有功能上的原因?如果我们只是将addViewController推送到self.navigationController?

,它会工作吗?

3 个答案:

答案 0 :(得分:13)

通常,您使用模态视图控制器将用户的注意力集中在任务上。当您推送时,用户处于某种导航流程中,但仍然可以轻松获得总应用程序。他们可能决定前进或后退,切换到中间的不同选项卡,无论如何。当他们得到一个模态视图控制器时,他们不能做任何事情,直到任务完成或取消(模态视图被解除)。

请参考why does this code use presentModalViewController? (not pushViewController)

答案 1 :(得分:11)

是的,有指导方针。 iOS Human Interface Guidelines说:

  

在需要时使用模态视图   提供完成任务的能力   与您有关的独立任务   应用程序的主要功能。一个   模态视图尤其合适   对于需要的多步子任务   不属于的UI元素   主应用程序用户界面全部   时间。

他们还说“让模态任务偶尔和简单”:

  

尽可能减少数量   人们必须处于模态中   执行任务的环境或   提供回应。 iOS应用程序   应该让人们互动   他们以非线性方式。情态   通过打断来防止这种自由   人们的工作流程并迫使他们去做   选择一条特定的道路。

     

在以下情况下,情态最合适:

     

获得用户至关重要   注意。必须完成任务   (或明确放弃)避免   将用户的数据保留在   暧昧的国家。人们欣赏   能够完成一个   模态中的自包含子任务   查看,因为上下文的转变是   清楚和暂时的。但如果   子任务太复杂了,人们可以   忽略了他们的主要任务   他们进入模态时暂停   视图。这种风险会增加   模态视图是全屏的,当它   包括多个从属视图或   的状态。

     

保持模态任务相当短暂   狭隘的。你不想要你的   用户体验模态视图   你的迷你应用程序   应用。要特别小心   创建涉及a的模态任务   观点的层次结构,因为人们可以   迷路了,忘了怎么追溯   他们的步骤。如果模态任务必须   在单独的视图中包含子任务,是   一定要给用户一个,清楚   通过层次结构的路径,并避免   圆度。

     

始终提供明显且安全的方式   退出模态任务。人们应该   始终能够预测命运   当他们解雇一个模态时他们的工作   图。

     

如果任务需要层次结构   模态视图,确保您的用户   了解如果他们点击一个会发生什么   在视图下方的完成按钮   顶层。检查任务以决定   是否在较低级别的完成按钮   视图应该只完成该视图   部分任务或整个任务。   如果可能,请避免添加完成   按钮来从属于视图,因为   这种混淆的可能性。

答案 2 :(得分:1)

来自Apple文档

模态视图控制器提供了管理应用程序流的有趣方法。最常见的是,应用程序使用模态视图控制器作为临时中断,以便从用户获取关键信息。但是,您也可以使用模态显示的视图控制器在特定时间为您的应用程序实现备用接口。

Modal View Controllers