2つのNSButtonとNSTextField、およびいくつかのビューと他のいくつかのコントロールを備えたウィンドウがあります。2つのNSButtonのそれぞれに右矢印キーと左矢印キーを割り当てます。2つのボタンは、右矢印キーと左矢印キーに対応しています。ただし、NSTextFieldにいるときは、矢印キーをテキストフィールドで通常どおりに実行し、NSButtonをトリガーしないようにします。ココアキーハンドリングのドキュメントやキーイベントに関するその他の質問を読んでみましたが、1つのコントロールでキーと同等の動作を変更しようとした例は見つかりませんでした。NSTextFieldをサブクラス化しようとしましたが、矢印キーをトラップできませんでした。これはどのように実装できますか?
質問する
844 次
2 に答える
2
bebecomeFirstResponder:をオーバーライドし、実装でsetKeyEquivalent:を呼び出すことができます。ボタンがファーストレスポンダーのステータスを失ったときに同等のキーを削除する場合は、resignFirstResponder:をオーバーライドします。
これは、ボタンの同等のステータスに影響を与えるファーストレスポンダーのステータスを持つコントロールで行います。たとえば、コンテナとしてのビューがあり、それがファーストレスポンダーになることができる場合は、-becomeFirstResponder :(スーパーを呼び出す)をオーバーライドして、そこでボタンに相当するものを管理します。これらのトピックをまだ理解していない場合は、ここでは簡単な答えが得られないため、多くの前提条件を読む必要があります。
于 2012-11-14T05:40:57.623 に答える
0
次のようにサブクラス化NSButton
してオーバーライドできます。performKeyEquivalent:
override func performKeyEquivalent(event: NSEvent) -> Bool {
guard
let window = window where window.firstResponder.isKindOfClass(NSText.self) == false
else {
return false
}
return super.performKeyEquivalent(event)
}
これにより、最初のレスポンダーがテキストフィールド/ビューの場合、同等のキーが基本的に無効になります。
于 2016-07-11T07:45:43.293 に答える