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 回答