如何检测 NSView 或其父 NSWindow 的活动外观?
How to detect active appearance for NSView or for its parent NSWindow?
所有本机控件在其父级 window 处于活动或非活动状态时具有不同的外观。我们应该如何在自定义组件中检查此状态,例如在渲染纽扣电池时?
我们可以检查 controlView.window
的属性,例如 isMainWindow
和 isKeyWindow
,但它们并未涵盖所有情况。例如,如果您在桌面上打开一个 window 应用程序并在全屏 Space 中打开另一个应用程序,则根据 public API,其中只有一个可以是 key 或 main。但是,标准控件似乎使它们在 Space 中都处于活动状态:
请注意两个 Safari windows 中的工具栏按钮是如何呈现为活动的。我们如何实现相同的行为?
幸运的是,SwiftUI 允许从环境继承一个新的魔法属性:
/// Window state.
@Environment(\.controlActiveState)
var windowState: ControlActiveState
这是官方的解决方案。干杯!
所有本机控件在其父级 window 处于活动或非活动状态时具有不同的外观。我们应该如何在自定义组件中检查此状态,例如在渲染纽扣电池时?
我们可以检查 controlView.window
的属性,例如 isMainWindow
和 isKeyWindow
,但它们并未涵盖所有情况。例如,如果您在桌面上打开一个 window 应用程序并在全屏 Space 中打开另一个应用程序,则根据 public API,其中只有一个可以是 key 或 main。但是,标准控件似乎使它们在 Space 中都处于活动状态:
请注意两个 Safari windows 中的工具栏按钮是如何呈现为活动的。我们如何实现相同的行为?
幸运的是,SwiftUI 允许从环境继承一个新的魔法属性:
/// Window state.
@Environment(\.controlActiveState)
var windowState: ControlActiveState
这是官方的解决方案。干杯!