0

在 Cocoa 中,是否可以仅相对于另一个窗口以模态方式将窗口呈现为窗口而不是工作表)?特别是,我想提出一个警报,以防止用户仅与它通知用户的窗口进行交互(当然,直到用户已经处理--关闭--警报)。虽然阻止用户与调用中指定的窗口进行交互以呈现警报,但她能够继续与其他窗口进行交互。我要重申:在这种情况下,将警报显示为表格不是可接受的解决方案。

4

1 回答 1

1

表格是使一个窗口模式相对于另一个窗口模式的标准方法——尤其是对于警报——因此 Apple 没有提供方便的 API 来以其他方式执行此操作。问你自己:

  • 为什么您认为工作表是不可接受的解决方案?
  • 你想用这个不能用工作表做的模态窗口做什么?
  • 通过在常见场景中使用不常见的 UI 为您的用户提供什么价值?

如果您真的想在不使用工作表 API 的情况下将一个窗口模式变为另一个模式,那么实现它只需考虑“窗口模式”的含义......您似乎已经完成了:

...阻止用户仅与窗口交互的警报...

因此,您真正需要做的是阻止用户与该窗口进行交互。有很多方法可以做到这一点,包括:

  • 禁用窗口中的所有控件
  • 让窗口中的任何事件处理自定义视图注意您的警报是否可见,并在这种情况下忽略事件
  • 在所有窗口内容之上分层一个视图,以防止点击到达下面的视图
  • 子类化NSApplication并覆盖sendEvent:以忽略窗口中的事件(这真的是矫枉过正并且可能有问题)

除此之外,您可能希望将警报附加到窗口,以便它们一起移动并且不要在 Exposé 中做奇怪的事情:请参阅-[NSWindow addChildWindow:ordered:]

于 2012-04-12T19:39:12.880 回答