覆盖keyDown会导致NSTableView出现问题

时间:2012-06-01 08:29:38

标签: objective-c cocoa

在我的NSTableView子类MyTableView中,我已经覆盖了

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

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

}

51是删除按钮的代码。我期望表视图在子类化之前删除所选项。

正确捕获事件并调用超类的keyDown方法。但是,该项目不再被删除。为什么?

由于

2 个答案:

答案 0 :(得分: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
        }
    }
} 

答案 1 :(得分:0)

如果您在按下Delete键时尝试调用特定方法,我建议覆盖-deleteBackward:方法(NSResponder的一部分),因为它更具体地隔离了这个拦截。它还管理重映射键盘,宏等的问题。

删除密钥还有-deleteForward而不是退格键。

-(void)deleteBackward:(id)sender
{
     // do my override here
     // do this only if super implements deleteBackward:
     [super deleteBackward: sender]
}