私はNSTableView
を持っていますが、デフォルトの動作に問題があります。keyDownを無効にする:NSTableViewカテゴリで矢印キーの処理を無効にする
次のように私はカテゴリにkeyDown:
メソッドをオーバーライドした場合:
- (void) keyDown:(NSEvent *)event {
[super keyDown:event];
}
私はもう、キーボードの矢印キーで行選択を変更することはできません。何故ですか?
私はNSTableView
を持っていますが、デフォルトの動作に問題があります。keyDownを無効にする:NSTableViewカテゴリで矢印キーの処理を無効にする
次のように私はカテゴリにkeyDown:
メソッドをオーバーライドした場合:
- (void) keyDown:(NSEvent *)event {
[super keyDown:event];
}
私はもう、キーボードの矢印キーで行選択を変更することはできません。何故ですか?
NSTableViewカテゴリ。それはサブクラスに同じよう
NSTableView
のカテゴリで
は、super
はないNSTableView
に、NSTableView
のスーパークラス(NSControl
)を指します。イベントをNSControl
バージョンkeyDown:
に渡しています。これは、テーブルビューについては何も知らず、矢印キーを自由に処理できません。
カテゴリ内のメソッドをオーバーライドすると、元のメソッドを呼び出す方法はありません。フレームワーククラス(ソースが利用できない)でこれを行うのは、ほとんど決して良い考えではありません。サブクラスを使用します。
Cf. Using Super in an Objective C Category?およびIs calling super in a category the same as calling it in a subclass?
ここで、ビューコントローラでそのメソッドをオーバーライドしますか? –
いいえ、NSTableViewのカテゴリにあります。カテゴリは書いていませんが、 - (void)keyDown:(NSEvent *)イベントメソッドはそこでオーバーライドされています。 – aneuryzm