在 Cocoa 中,是否可以仅相对于另一个窗口以模态方式将窗口呈现为窗口(而不是工作表)?特别是,我想提出一个警报,以防止用户仅与它通知用户的窗口进行交互(当然,直到用户已经处理--关闭--警报)。虽然阻止用户与调用中指定的窗口进行交互以呈现警报,但她能够继续与其他窗口进行交互。我要重申:在这种情况下,将警报显示为表格不是可接受的解决方案。
问问题
123 次
1 回答
1
表格是使一个窗口模式相对于另一个窗口模式的标准方法——尤其是对于警报——因此 Apple 没有提供方便的 API 来以其他方式执行此操作。问你自己:
- 为什么您认为工作表是不可接受的解决方案?
- 你想用这个不能用工作表做的模态窗口做什么?
- 通过在常见场景中使用不常见的 UI 为您的用户提供什么价值?
如果您真的想在不使用工作表 API 的情况下将一个窗口模式变为另一个模式,那么实现它只需考虑“窗口模式”的含义......您似乎已经完成了:
...阻止用户仅与窗口交互的警报...
因此,您真正需要做的是阻止用户与该窗口进行交互。有很多方法可以做到这一点,包括:
- 禁用窗口中的所有控件
- 让窗口中的任何事件处理自定义视图注意您的警报是否可见,并在这种情况下忽略事件
- 在所有窗口内容之上分层一个视图,以防止点击到达下面的视图
- 子类化
NSApplication
并覆盖sendEvent:
以忽略窗口中的事件(这真的是矫枉过正并且可能有问题)
除此之外,您可能希望将警报附加到窗口,以便它们一起移动并且不要在 Exposé 中做奇怪的事情:请参阅-[NSWindow addChildWindow:ordered:]
。
于 2012-04-12T19:39:12.880 回答