我有一個簡單的可可應用程序與表視圖顯示幾個條目。我希望用戶能夠通過在表格中選擇它並按下「刪除」來刪除他想要的任何條目。如何檢測「刪除」按鍵,以及如何知道用戶是否在桌面視圖中選擇了一個條目?從鍵盤中刪除條目與表按鍵
**編輯:如果我沒有說清楚,「刪除」是指在Mac鍵盤上的退格鍵而不是GUI按鈕。
我有一個簡單的可可應用程序與表視圖顯示幾個條目。我希望用戶能夠通過在表格中選擇它並按下「刪除」來刪除他想要的任何條目。如何檢測「刪除」按鍵,以及如何知道用戶是否在桌面視圖中選擇了一個條目?從鍵盤中刪除條目與表按鍵
**編輯:如果我沒有說清楚,「刪除」是指在Mac鍵盤上的退格鍵而不是GUI按鈕。
另一種選擇是隻將一個等效鍵(鍵盤快捷鍵)分配給編輯菜單的「刪除」項目,並將其操作設置爲您的控制器的方法delete:
。
爲表視圖創建子類,並在按下刪除按鈕時發送它的委託事件。
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;
}
如果你只有一個表,一個簡單的解決方案是實現幾NSResponder
方法在你的窗口控制器或視圖控制器:
- (void)keyDown:(NSEvent *)event
{
[self interpretKeyEvents:@[event]];
}
- (void)deleteBackward:(id)sender
{
// use the tableView's selectedRow to determine what/if to delete
}
這將如何在迅速完成? –