macOSでNSViewの下のボタンをクリックできなくしたい
当然、NSViewオブジェクトの下に隠れたボタンはクリックできないだろう、と思っていたんだけどどうもmacOSではできるっぽい。
NSButtonのサブクラスでhitTest(_:)をoverrideして、そこで被せてるviewオブジェクトもクリックしてるようならnilを返す(ボタンは無効)ようにすれば意図通りに動くことを確認した。
とりあえず機能することはわかったんだけど、サブクラス作るのも参照もらっておくのも面倒だし、イマイチすっきりしないなあ。
macOS 10.15.6 Catalina
Xcode 11.6
Swift 5.2.4
↑というツイート後に試行錯誤した結果、、、NSButtonの上にNSViewを被せても下のボタンはクリックできる、、、そうだったっけ?????iOSじゃタップできないよな。 pic.twitter.com/8baaSIzGqH
— Tatsuya (@yt) August 6, 2020
NSButtonのサブクラスでhitTest(_:)をoverrideして、そこで被せてるviewオブジェクトもクリックしてるようならnilを返す(ボタンは無効)ようにすれば意図通りに動くことを確認した。
override func hitTest(_ point: NSPoint) -> NSView? {あらかじめ上に被さるNSViewオブジェクトの参照(↑のコードだとcover)をもらっておく必要がある。
if let _ = cover.hitTest(point) {
return nil
}
return super.hitTest(point)
}
とりあえず機能することはわかったんだけど、サブクラス作るのも参照もらっておくのも面倒だし、イマイチすっきりしないなあ。
macOS 10.15.6 Catalina
Xcode 11.6
Swift 5.2.4
スポンサーサイト
<< CocoaPodsでAdMob SDKを最新のバージョンにする TopPage undoするとなぜか一番最初まで戻る(未解決) >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1353-fc9e260d
https://ringsbell.blog.fc2.com/tb.php/1353-fc9e260d