2

2つのNSButtonとNSTextField、およびいくつかのビューと他のいくつかのコントロールを備えたウィンドウがあります。2つのNSButtonのそれぞれに右矢印キーと左矢印キーを割り当てます。2つのボタンは、右矢印キーと左矢印キーに対応しています。ただし、NSTextFieldにいるときは、矢印キーをテキストフィールドで通常どおりに実行し、NSButtonをトリガーしないようにします。ココアキーハンドリングのドキュメントやキーイベントに関するその他の質問を読んでみましたが、1つのコントロールでキーと同等の動作を変更しようとした例は見つかりませんでした。NSTextFieldをサブクラス化しようとしましたが、矢印キーをトラップできませんでした。これはどのように実装できますか?

4

2 に答える 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 に答える