0

私の NSTableView サブクラス MyTableView で上書きしました

- (void) keyDown:(NSEvent *)event {

    if ( [event keyCode] == 51 || [event keyCode] == 117 ) {
        [super keyDown:event];
        return;
    }

}

51は削除ボタンのコードです。サブクラス化の前と同様に、テーブルビューが選択したアイテムを削除することを期待しています。

イベントは正しくキャッチされ、スーパークラスの keyDown メソッドが呼び出されます。ただし、アイテムは削除されません。なんで ?

ありがとう

4

2 に答える 2

1

ウィンドウクラスでkeyDown:をオーバーライドすることをお勧めします。

-(void) keyDown: (NSEvent *) event
{
    NSString *chars = [event characters];
    unichar character = [chars characterAtIndex: 0];
    if (character == NSDeleteCharacter || character == NSBackspaceCharacter) 
    {
        NSTableView* view = (NSTableView*)[self firstResponder];
        if(view == theTableView)
        {
        // do something to delete the item from your data model and reload the tableview
        }
    }
} 
于 2012-06-01T13:59:28.127 に答える
0

Delete キーが押されたときに特定のメソッドを呼び出すだけの場合は、このインターセプトをより具体的に分離するため、-deleteBackward:メソッド (の一部) をオーバーライドすることをお勧めします。NSResponderまた、再マップされたキーボード、マクロなどの問題も管理します。

-deleteForwardバックスペースキーの代わりに削除キーもあります。

-(void)deleteBackward:(id)sender
{
     // do my override here
     // do this only if super implements deleteBackward:
     [super deleteBackward: sender]
}
于 2012-06-01T14:17:05.287 に答える