【问题标题】:NSPopover with NSPopoverBehaviorSemitransient in toolbar not closing工具栏中带有 NSPopoverBehaviorSemitransient 的 NSPopover 未关闭
【发布时间】:2014-06-21 19:14:38
【问题描述】:

我目前在NSToolbar (Mac OS X) 中有三个按钮。每个按钮都会触发不同的NSPopover,以相对于发送操作的按钮出现。那部分工作正常。其中两个弹出框使用NSPopoverBehaviorTransient,一个使用NSPopoverBehaviorSemitransient(因为我特别希望它在应用程序之间切换或移动窗口时保持打开状态)。

当其中一个瞬态弹出框打开并且我单击弹出框本身之外的任何位置时,弹出框会正确关闭。如果我单击另一个显示另一个弹出窗口的工具栏按钮,则半瞬态弹出窗口(除了切换应用程序和移动窗口)除外也是如此。在这种情况下,现在两个弹出框同时在屏幕上可见。 (我怀疑这是一个错误。)

我已经尝试过在按下另一个工具栏按钮时我可以自行启动关闭的方法。我想出的唯一选择是在文档级别跟踪当前打开的弹出框,并确保在打开另一个弹出框之前手动关闭它。我宁愿半瞬态弹出框能够自行关闭。

有什么我忽略的吗?谢谢。

【问题讨论】:

    标签: objective-c appkit nstoolbar nspopover


    【解决方案1】:

    半瞬态行为的不透明定义包括半瞬态弹出框不会因导致打开或关闭另一个弹出框的事件(例如鼠标单击)而关闭。

    一个值得注意的例外是显示半瞬态弹出框会导致其他半瞬态弹出框关闭...


    所以这不是错误,只是定义不明确的行为。

    不幸的是,这意味着如果您想混合使用半瞬态和瞬态弹出框,您需要在更高级别上跟踪显示的弹出框。另一种方法是将所有弹出框设为半瞬态,并在您的设计需要时为特定弹出框添加额外的关闭逻辑。

    为 (1) 更好的、记录在案的半瞬态和瞬态行为定义 (2) 更深入地定制这些行为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多