2012-06-01 46 views
0

在我NSTableView的子類MyTableView我已經覆蓋重載的keyDown導致問題的NSTableView的

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

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

} 

51是刪除按鈕的代碼。我在等待子類化之前期望表視圖刪除選定的項目。

該事件被正確地捕獲並調用超類的KeyDown方法。但是,該項目不再被刪除。爲什麼?

感謝

+0

2問題:你在做什麼?你是否會捕獲keyUp以及keyDown? – gaige

+0

@gaige 1.I需要時按下刪除按鈕來調用的方法。 2不,我應該嗎?默認情況下,關鍵項關閉時項目已被刪除。 – aneuryzm

+0

不清楚你想要做什麼。如果物品已被刪除,你爲什麼在這裏捕捉到keydown? –

回答

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

如果您嘗試按下Delete鍵的時候只是來調用特定的方法,我建議重寫-deleteBackward:方法(的NSResponder一部分),因爲它更具體的隔離這種攔截。它還管理重新映射鍵盤,宏的問題,等等。

還有-deleteForward爲刪除鍵,而不是退格鍵。

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