3

更新: 以下のようにファーストレスポンダに設定された NSView サブクラスから NSView keyUp メソッドをオーバーライドしていますが、それが呼び出されているという証拠はまだ見られません。

@implementation svsView

- (BOOL)acceptsFirstResponder {
    return YES;
}

- (void)keyUp:(NSEvent *)event {
  //--do key up stuff--
  NSLog(@"key up'd!");
}

@end

-- 元の投稿 -- 私は Cocoa と Obj-C を初めて使用し、(void)keyUp: を自分のコントローラー クラス (それ自体は NSController 型) の実装内から実行しようとしています。ただし、これを配置するのに適切な場所かどうかはわかりません。私は一連の同様のボタンをそれぞれ一意のキー相当 (IB ボタン属性) に設定し、それぞれが (IBAction)keyInput メソッドを呼び出して、各キーの ID を別のオブジェクトに渡します。これは問題なく動作しますが、各キーが離されたタイミングも追跡したいと考えています。

-- 元の [悪い] 例 --

@implementation svsController

//init
//IBActions

- (IBAction)keyInput:(id)sender {
  //--do key down stuff--
}

- (void)keyUp:(NSEvent *)event {
  //--do key up stuff--
}

@end

失敗すると、ユーザー定義のkeyInputのように、keyUpを(voidではなく)IBActionとして試し、Interface Builderの適切なボタンに接続しましたが、keyUpはキーが押されていないときにのみ呼び出されました解放されたとき。(私はそれが起こるだろうと思っていました。)

申し訳ありませんが、このメソッドを別のクラスに配置するか、別の方法で行う必要がありますか? ただし、どこにいても、コントローラー クラスが所有するオブジェクトにアクセスできる必要があります。

あなたが持っているかもしれない洞察に感謝します。

4

2 に答える 2

2

NSResponder サブクラス (NSView のカスタム サブクラスなど) は、重要なイベントを処理します。「左/右への移動」、「改行の挿入」などのより抽象的なレベルのイベントも処理します。その後、メッセージをコントローラーに送信して、それに応じて応答することができます。

于 2009-12-06T05:25:45.820 に答える
1

わお!私はそれを釘付けにしたと思います。IB のクラスへの NSView/NSWindow 参照を使用してサブクラスをインスタンス化する必要がありました。UI で実際にそのインスタンスを作成していませんでした。クラッパーダウン過去数時間!途中で1つか2つのことを学んだことはありません。;)

于 2009-12-06T11:11:27.017 に答える