Macos NSTableView-如何删除空格键事件侦听器?

Macos NSTableView-如何删除空格键事件侦听器?,macos,cocoa,nstableview,key-events,Macos,Cocoa,Nstableview,Key Events,在我的Mac应用程序中,我有一个NSTableView。默认行为是单击键盘上的空格键选择一行,事件tableView应选择row 但在我的用例中,我有一个启动和停止音频播放的按钮。我想从NSTableView中删除空格键处理,并将其移动到播放按钮 我尝试引入一个用于播放的菜单项,并为其指定了空格键。然而,这不起作用。每次单击空格键时,NSTableView将启动,而不是菜单项 我的问题是:如何从NSTableView中删除空格键侦听器 提前谢谢。我找到了解决问题的方法 我覆盖了我的NSTable

在我的Mac应用程序中,我有一个
NSTableView
。默认行为是单击键盘上的空格键选择一行,事件
tableView应选择row

但在我的用例中,我有一个启动和停止音频播放的按钮。我想从
NSTableView
中删除空格键处理,并将其移动到播放按钮

我尝试引入一个用于播放的菜单项,并为其指定了空格键。然而,这不起作用。每次单击空格键时,
NSTableView
将启动,而不是菜单项

我的问题是:如何从
NSTableView
中删除空格键侦听器


提前谢谢。

我找到了解决问题的方法

我覆盖了我的
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

我找到了解决这个问题的办法

我覆盖了我的
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

可以使用NSTableViewDelegate协议完成此操作,避免了必须将NSTableView子类化:

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

可以使用NSTableViewDelegate协议完成此操作,避免了必须将NSTableView子类化:

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

是否尝试将空格键指定为按钮的等效键?你可以在笔尖上这样做。选择按钮。切换到属性检查器。单击键等效字段。按空格键。嗨@KenThomases,这实际上是个好主意,它似乎可以工作。但是,NSTableView仍会激发shouldSelectRow。我需要以某种方式删除触发shouldSelectRow事件的空格。有什么想法吗?记录委托方法的
[NSThread callStackSymbols]
结果,并编辑您的问题以将其包括在内。嗨@Ken,我想我找到了一种方法。我使用自定义类覆盖NSTableView并实现keyDown。现在,我可以重新路由空格键事件,并将NSTableView的所有其他键事件保留在tact中。这非常好。您是否尝试过将空格键指定为按钮的等效键?你可以在笔尖上这样做。选择按钮。切换到属性检查器。单击键等效字段。按空格键。嗨@KenThomases,这实际上是个好主意,它似乎可以工作。但是,NSTableView仍会激发shouldSelectRow。我需要以某种方式删除触发shouldSelectRow事件的空格。有什么想法吗?记录委托方法的
[NSThread callStackSymbols]
结果,并编辑您的问题以将其包括在内。嗨@Ken,我想我找到了一种方法。我使用自定义类覆盖NSTableView并实现keyDown。现在,我可以重新路由空格键事件,并将NSTableView的所有其他键事件保留在tact中。那很好用。