Как обнаружить активный внешний вид для NSView или для его родительского NSWindow? - PullRequest
6 голосов
/ 03 октября 2019

Все родные элементы управления выглядят по-разному, когда их родительское окно активно или неактивно. Как мы должны проверять это состояние в пользовательских компонентах, например, при визуализации ячейки кнопки?

Мы могли бы проверить свойства controlView.window, такие как isMainWindow и isKeyWindow, но они не охватывают все случаи. Например, если вы откроете одно окно приложения на рабочем столе, а другое - в полноэкранном пространстве, только одно из них может быть ключевым или основным в соответствии с общедоступными API-интерфейсами. Однако стандартные элементы управления отображают их как активные в обоих пространствах:

Обратите внимание, как кнопки панели инструментов в обоих окнах Safari отображаются как активные. Как нам добиться такого же поведения?

1 Ответ

0 голосов
/ 17 октября 2019

К счастью, SwiftUI позволяет наследовать новое магическое свойство от Environment:

/// Window state.
@Environment(\.controlActiveState)
var windowState: ControlActiveState

Это официальное решение. Ура! * * 1004

...