2011-10-28 47 views
0

我有一個簡單的可可應用程序與表視圖顯示幾個條目。我希望用戶能夠通過在表格中選擇它並按下「刪除」來刪除他想要的任何條目。如何檢測「刪除」按鍵,以及如何知道用戶是否在桌面視圖中選擇了一個條目?從鍵盤中刪除條目與表按鍵

**編輯:如果我沒有說清楚,「刪除」是指在Mac鍵盤上的退格鍵而不是GUI按鈕。

回答

1

另一種選擇是隻將一個等效鍵(鍵盤快捷鍵)分配給編輯菜單的「刪除」項目,並將其操作設置爲您的控制器的方法delete:

3

爲表視圖創建子類,並在按下刪除按鈕時發送它的委託事件。

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; 
} 
+0

這將如何在迅速完成? –

0

如果你只有一個表,一個簡單的解決方案是實現幾NSResponder方法在你的窗口控制器或視圖控制器:

- (void)keyDown:(NSEvent *)event 
{ 
    [self interpretKeyEvents:@[event]]; 
} 

- (void)deleteBackward:(id)sender 
{ 
    // use the tableView's selectedRow to determine what/if to delete 
}