是否可以为另一个窗口模拟显示窗口(作为自己的窗口,而不是工作表)?

时间:2012-04-12 17:06:54

标签: objective-c cocoa

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

1 个答案:

答案 0 :(得分:1)

表格是制作一个窗口模式相对于另一个窗口模式的标准方法 - 特别是对于警报 - 因此Apple不提供方便的API来执行此操作。问问自己:

  • 为什么您认为表格是不可接受的解决方案?
  • 你想用这张模板窗口做什么呢?
  • 对于常见方案,使用不常见的UI为用户提供了什么价值?

如果你真的想在没有使用工作表API的情况下为另一个制作窗口模态,那么实现它只是考虑“窗口模态”意味着什么...它似乎你已经完成了:

  

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

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

  • 禁用窗口中的所有控件
  • 在窗口中有任何事件处理自定义视图,请注意您的警报是否可见,并在此情况下忽略事件
  • 将视图叠加在所有窗口内容之上,以阻止点击次数到达
  • 下方的视图
  • 子类NSApplication并覆盖sendEvent:以忽略窗口中的事件(这实在是太过分了,可能会出现问题)

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