2015-01-14 49 views
0

在我的Mac應用程序中,我有一個NSTableView。默認的行爲是點擊鍵盤上的空格鍵,它選擇一行和事件tableView shouldSelectRowNSTableView - 如何刪除空格鍵事件偵聽器?

但在我的使用案例中,我有一個啓動和停止音頻播放的按鈕。我想刪除NSTableView中的空格鍵處理並將其移至播放按鈕。

我嘗試引入一個菜單項進行播放併爲其分配空格鍵。然而,這不起作用。每次點擊空格鍵NSTableView都會觸發,而不是菜單項。

我的問題是:如何從NSTableView中刪除空格鍵偵聽器?

在此先感謝。

+0

你試過分配空格鍵爲等效鍵按鈕?你可以在NIB中做到這一點。選擇按鈕。切換到「屬性」檢查器。點擊Key Equivalent字段。按空格鍵。 –

+0

嗨@KenThomases,這實際上是一個好主意,它似乎工作,但是,NSTableView仍然會觸發shouldSelectRow。我需要以某種方式刪除觸發shouldSelectRow事件的空間。有任何想法嗎 ? – Mozzak

+0

從委託方法記錄'[NSThread callStackSymbols]'的結果並編輯您的問題以包含它。 –

回答

1

我找到了概述問題的解決方案。

我覆蓋了我的NSTableView並實施了keyDown事件,我可以截獲空格鍵事件。

@implementation AudioFileTableView 

- (void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 

    // Drawing code here. 
} 

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

    unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; 

    if(key == 0x0020) 
    { 
     // handle the spacebar event 
     return; 
    } 

    [super keyDown:theEvent]; 
} 

@end 
2

它可以通過NSTableViewDelegate協議來完成,避免了子類NSTableView的:

- (BOOL)tableView:(NSTableView *)tableView shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString { 
    return ([event.charactersIgnoringModifiers characterAtIndex:0]!=0x20); 
}