在我的NSTableView子类MyTableView中,我已经覆盖了
- (void) keyDown:(NSEvent *)event {
if ( [event keyCode] == 51 || [event keyCode] == 117 ) {
[super keyDown:event];
return;
}
}
51是删除按钮的代码。我期望表视图在子类化之前删除所选项。
正确捕获事件并调用超类的keyDown方法。但是,该项目不再被删除。为什么?
由于
答案 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]
}