【发布时间】:2019-10-03 10:04:45
【问题描述】:
所有本机控件在其父窗口处于活动或非活动状态时具有不同的外观。我们应该如何在自定义组件中检查这种状态,例如在渲染按钮单元格时?
我们可以检查controlView.window 的属性,例如isMainWindow 和isKeyWindow,但它们并不涵盖所有情况。例如,如果您在桌面上打开应用程序的一个窗口,而在全屏空间中打开另一个窗口,则根据公共 API,其中只有一个可以是 key 或 main。但是,标准控件似乎将它们在两个空间中都呈现为活动状态:
请注意两个 Safari 窗口中的工具栏按钮是如何呈现为活动状态的。我们如何实现相同的行为?
【问题讨论】:
-
你能检查一下windows全屏状态吗?
-
@Mattie 当你从全屏空间切换到桌面时这还是不够用????
-
我认为这是一个愚蠢的建议。 developer.apple.com/documentation/appkit/nswindow/… 怎么样
-
@MarekH 不确定你的意思。调试活动窗口几乎是不可能的,因为您需要在应用程序之间切换。我敢打赌 Safari 使用了一个名为
NSWindow.hasActiveAppearance的私有 API。 -
似乎
NSWindow.hasActiveAppearance涵盖了所有情况。但该属性不符合 KVC 标准,因此我们需要为其找到私人通知或使用计时器来获取更新。
标签: cocoa nsview nswindow appkit nscell