🦋
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