0

私はNSTableViewを持っていますが、デフォルトの動作に問題があります。keyDownを無効にする:NSTableViewカテゴリで矢印キーの処理を無効にする

次のように私はカテゴリにkeyDown:メソッドをオーバーライドした場合:

- (void) keyDown:(NSEvent *)event { 
    [super keyDown:event]; 
} 

私はもう、キーボードの矢印キーで行選択を変更することはできません。何故ですか?

+0

ここで、ビューコントローラでそのメソッドをオーバーライドしますか? –

+0

いいえ、NSTableViewのカテゴリにあります。カテゴリは書いていませんが、 - (void)keyDown:(NSEvent *)イベントメソッドはそこでオーバーライドされています。 – aneuryzm

答えて

7

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?

関連する問題