Создает подкласс табличного представления и отправляет ему события делегата при нажатии на удаление.
MyTableView.h:
@interface MyTableView : NSTableView
@end
@protocol MyTableViewDelegate <NSTableViewDelegate>
-(BOOL)deleteKeyPressedForTableView:(MyTableView *)tableView;
@end
MyTableView.m:
+(unichar)firstCharPressedForEvent:(NSEvent *)theEvent {
if (![[theEvent characters] length]) return -1;
return [[theEvent characters] characterAtIndex:0];
}
+(BOOL)eventIsDeleteKeyPressed:(NSEvent *)theEvent {
switch ([MyTableView firstCharPressedForEvent:theEvent]) {
case NSDeleteFunctionKey:
case NSDeleteCharFunctionKey:
case NSDeleteCharacter:
return YES;
default:
return NO;
}
}
-(void)keyDown:(NSEvent *)theEvent {
if ([MyTableView eventIsDeleteKeyPressed:theEvent])
if ([[self delegate] respondsToSelector:@selector(deleteKeyPressedForTableView:)])
if ([(id<MyTableViewDelegate>)[self delegate] deleteKeyPressedForTableView:self])
return;
// The delegate wasn't able to handle it
[super keyDown:theEvent];
}
Делегат табличного представления:
- (BOOL)deleteKeyPressedForTableView:(MyTableView *)tableView {
// check if row is selected
if (no_row_selected) return NO;
// handle deletion
if (error_condition) return NO;
return YES;
}