我项目中的所有 NSTableView 都没有收到空格键键盘事件

ane*_*yzm 3 cocoa objective-c

NSTableView 不接收空格键键盘事件。

当我按 keyUp 或 keyDown 时,选择会正确更改,但我无法通过按空格键选中/取消选中第一列中的复选框。

由于箭头键工作正常,我假设 NSTableView 正确接收了事件。

另外,我刚刚检查了我的代码中是否有任何可能会干扰的委托方法:

- (void)sendEvent:(NSEvent *)event;
- (BOOL)handleEvent:(NSEvent *)event;
- (void) keyDown:(NSEvent *)event;
Run Code Online (Sandbox Code Playgroud)

并将它们注释掉,但空格键仍然不起作用。谢谢

And*_*sen 6

要检查的一件事是类型选择功能没有吃掉你的空格键。我过去见过这个问题。你应该可以打电话[yourTableView setAllowsTypeSelect:NO]把它关掉。但是,出于某种原因,在一种情况下,我能够成功解决此问题的唯一方法是实现 NSTableViewDelegate 方法-tableView:typeSelectStringForTableColumn:row:并返回 nil:

- (NSString *)tableView:(NSTableView *)tableView typeSelectStringForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

这将一起禁用类型选择。就我而言,这很好。如文档中所述:

如果不应搜索行或 tableColumn,则返回 nil。

-tableView:shouldTypeSelectForEvent:withCurrentSearchString:如果事件的 keyCode 为 49(空格键),则另一个选项可能是实现并返回 NO。这样类型选择保持启用,它只是被忽略的空格键。

这只是一个想法。它实际上可能不是导致您出现问题的原因,但我过去曾看到过相同的症状,并且 type select 是原因。