总的来说,模态界面会吸大石头。另一方面,我想不出更好的方法来处理File Open...或Print...而我认为这是因为
- 它们是偶尔的动作,不频繁且重要,并且
- 它们本质上是原子的;您要么完成指定所有打印选项并完成它,要么取消整个节目。
让我们整理一些风格指南。建议对话是首选演示的任何用例以及首选的原因。对话框可以是非模态的吗?如果是,您如何标记事务边界,因为 Cancel 不再具有明确的含义。例如,您是否使用“应用”按钮?
总的来说,模态界面会吸大石头。另一方面,我想不出更好的方法来处理File Open...或Print...而我认为这是因为
让我们整理一些风格指南。建议对话是首选演示的任何用例以及首选的原因。对话框可以是非模态的吗?如果是,您如何标记事务边界,因为 Cancel 不再具有明确的含义。例如,您是否使用“应用”按钮?
IMO ,仅当您必须在应用程序继续之前处理对话框正在执行或询问的任何内容时,才应使用模态界面。任何其他时候,如果您使用对话框,它应该是非模态的。
在做非模态窗口时,您可能希望确保它们是唯一的:您并不真正想要两个相同的工具箱(例如在图形程序中)或两个相同的首选项对话框(我在一个产品中看到过),这可以是充其量是令人困惑的。
另一方面,当搜索/替换对话框是非模态的时,我很感激:我可以返回文档并取消上次更改,跳过其他地方等;不会丢失当前设置。
不知何故,模态对话框告诉用户“停止其他一切并完成你正在做的事情”,正如斯蒂芬赖顿的回答所指出的那样,它有它的用途。
根据我的经验,在 UI 中很少有东西应该是模态的。Eclipse 就是最好的例子之一,而且可能是站点用户非常熟悉的例子。虽然它有一些模态对话框,而且我在这里只说核心 IDE,但它们主要分为三类:文件操作、首选项对话框和参数对话框。
偏好对话框虽然传统上是模态的,但也不一定是模态的。您所要做的就是查看 Mac OS 偏好模型,其中配置更改会立即发生,仅在更改可能会破坏正在进行的工作的情况下才会引入模式行为。
简而言之,这就是我要说的对模态的一个很好的总结。此集合的例外情况应通过使用来充分证明。
用户登录窗口怎么样,在您登录之前,您不能(或不应该)使用应用程序的其余部分,假设安全是必要的。
我认为区别在于,如果在显示对话框时用户可以在应用程序中执行任何操作,那么它不应该是模态的。这包括复制/粘贴操作。如果文件/打开和打印对话框也不是模态的,我个人更喜欢它。我认为模态对话框是设计薄弱的标志,是让代码快速推出的必要之恶。