keyUpイベントは?:オーバーライドNSViewの方法を聞きました
-
13-09-2019 - |
質問
更新:私は今、以下のようなファーストレスポンダに設定NSViewのサブクラスからNSViewのkeyUpイベントメソッドをオーバーライドするんだけど、まだそれが呼び出されているという証拠を見ていないです。
@implementation svsView
- (BOOL)acceptsFirstResponder {
return YES;
}
- (void)keyUp:(NSEvent *)event {
//--do key up stuff--
NSLog(@"key up'd!");
}
@end
- ORIGINAL POST-- 私はココアとのObj-Cに新たなんだと(無効)keyUpイベントをやろうとしています:(自身がタイプNSControllerである)私のコントローラクラスの実装内から。これはしかし、それを置くための適切な場所であれば、私はよく分かりません。私は、一意のキーと同等(IBボタン属性)へのような一連のボタン各セットを持っており、それぞれが、別のオブジェクト上に各キーのIDを渡し、私の(IBAction)keyInputメソッドを呼び出します。これはうまく動作しますが、私はまた、各キーが解放されたときに追跡したい。
- ORIGINAL [悪い]例 -
@implementation svsController
//init
//IBActions
- (IBAction)keyInput:(id)sender {
//--do key down stuff--
}
- (void)keyUp:(NSEvent *)event {
//--do key up stuff--
}
@end
ユーザ定義keyInputであるように失敗すると、私はまた、(代わりにボイドの)IBActionとしてkeyUpイベントを試み、そしてInterface Builderで適切なボタンにそれをフックが、キーがあったときにkeyUpイベントのみと呼ばれていましたダウンしていないリリースしたとき。 (私は一種の考え出し起こると思われる。)
私のnooberyを許したが、私は別のクラスでは、このメソッドを置くか、違った何かをすべきか?それはどこに、しかし、私はコントローラクラスが所有するオブジェクトにアクセスできるようにする必要があります。
あなたが持つかもしれない洞察力をありがとうます。
解決 2
うわー!私はそれを釘付けしたと思います。私はIB内のクラスへのNSView / NSWindowのを参照して、私のサブクラスのインスタンスを作成する必要がありました。実際UIでそのインスタンスを作成していませんでした。過去数台無しダウン時間!私は道に沿っての事か2を学んだのSans。 ;)
他のヒント
(例えばNSViewののカスタムサブクラスなど)NSResponderのサブクラスは、キーイベントを処理します。彼らも、彼らはそれに応じて応答するコントローラにメッセージを送信することができる等、「移動左/右」、「挿入改行」、などのより抽象的なレベルのイベントを処理します。