🦋
SwiftUI: NSHostingViewでacceptsFirstMouse(for:)を有効にする
ウインドウからフォーカスが外れた後にウインドウをクリックした際、一度フォーカスを取り戻してからもう一度クリックするとイベントが発火するのがデフォルトの挙動ですが、NSViewのもつacceptsFirstMouse(for:)にtrueを渡してあげると一度目のクリックからイベントが発火するようになります。しかし、SwiftUIのViewの場合はこのオプションがないためNSHostingView経由の時はどうするんだと実験してみてやり方がわかりました。
class MyHostingView<T: View>: NSHostingView<T> {
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
return true
}
}
要はNSHostingViewを継承したサブクラスを作り、acceptsFirstMouse(for:)をoverrideしてあげればいいだけです。ウインドウのcontentViewにこれを代入します。
Discussion