2015-01-14 134 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); 
}