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

leo*_*leo 6 iphone cocoa-touch modalviewcontroller ios

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

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

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

    [self.navigationController presentModalViewController:navController 
                               animated:YES];
Run Code Online (Sandbox Code Playgroud)

这有功能上的原因吗?如果我们只是将addViewController推送到self.navigationController,它会工作吗?

vis*_*kh7 14

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

请参考为什么这段代码使用presentModalViewController?(未pushViewController)


cdu*_*uhn 11

是的,有指导方针.在iOS的人机界面指南说:

当您需要提供完成与应用程序主要功能相关的自包含任务的能力时,请使用模态视图.模态视图特别适用于需要始终不属于主应用程序用户界面的UI元素的多步子任务.

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

尽可能减少人们在模态环境中执行任务或提供响应的次数.iOS应用程序应该允许人们以非线性方式与它们进行交互.模态通过中断人们的工作流程并强制他们选择特定路径来防止这种自由.

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

引起用户注意是至关重要的.必须完成(或明确放弃)任务以避免将用户的数据置于模糊状态.人们欣赏能够在模态视图中完成自包含的子任务,因为上下文转换是明确和临时的.但是如果子任务太复杂,人们可能会忽略他们进入模态视图时暂停的主要任务.当模态视图为全屏并且包含多个从属视图或状态时,此风险会增加.

保持模态任务相当短且集中.您不希望用户在应用程序中体验模式视图作为迷你应用程序.特别警惕创建一个涉及视图层次结构的模态任务,因为人们可能迷路并忘记如何回溯他们的步骤.如果模态任务必须在单独的视图中包含子任务,请确保为用户提供通过层次结构的单一,清晰的路径,并避免循环.

始终提供一种明显且安全的退出模态任务的方法.人们应该总是能够在他们解雇模态视图时预测他们工作的命运.

如果任务需要模式视图的层次结构,请确保用户了解如果他们点击位于顶层以下的视图中的"完成"按钮会发生什么.检查任务以确定较低级别视图中的"完成"按钮是否应仅完成该视图的任务部分或整个任务.如果可能,请避免将"完成"按钮添加到从属视图,因为这可能会造成混淆.