1

我有一个不响应向上/向下箭头键的 NSTableView。据我了解,响应是默认行为,所以我不确定发生了什么(注意,我没有覆盖任何键盘命令)。我为我的桌子做的唯一设置是:

[tableView setDoubleAction: @selector(doubleClickedRow)];
[tableView setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[tableView registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]];
[tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal:NO];

但据我所知,这些都不会造成任何问题。

有没有人对我可以在哪里寻找这个问题的根源有任何建议?

4

5 回答 5

3

如果包含表的 NSWindow 不是键窗口,则 NSTableView 也将对箭头键无响应。

我最近遇到的一种情况是,如果未在 Interface Builder 中设置 NSWindow 的“标题栏”外观选项:这会更改 NSWindow 的默认行为以拒绝键状态。见-[NSWindow canBecomeKeyWindow]

因此,即使 NSWindow 显示为没有标题栏的模式表,也必须设置 Title Bar 选项,否则关键事件不会到达 NSTableView。

于 2014-11-09T22:05:01.457 回答
1

你有没有在keyDown:任何地方覆盖?在自定义NSTableView子类中还是在窗口控制器中?这可能是箭头键在您的表格中不起作用的原因。

我在自定义表格视图中遇到了同样的问题。我通过调用super箭头键让表处理事件来解决它:

@implementation ILCustomTableView

- (void)keyDown:(NSEvent *)theEvent 
{
    if ([theEvent modifierFlags] & NSNumericPadKeyMask)
    {
        [super keyDown:theEvent];    // Let table view handle arrow keys
    } else {

        [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];        
    }
}

- (void)insertNewline:(id)sender
{
    // Enter key. Do special stuff here...
}
@end
于 2011-12-17T18:18:38.667 回答
0

我有一个不响应向上/向下箭头键的 NSTableView。据我了解,这是默认行为

这不是默认行为。NSTableView 确实处理键盘事件并允许使用光标键进行导航。

也许您可以使用以下问题中的技巧来调试响应者链: 如何检查响应者链?

于 2011-10-28T12:36:52.400 回答
0

我遇到了同样的问题,使用箭头键我的 tableview 的代表没有收到更改通知。

这是我的 Swift 解决方案:

首先对 NSTableView 进行子类化,然后覆盖此方法。

override func keyDown(theEvent: NSEvent) {
    super.keyDown(theEvent)
    let code=theEvent.keyCode
    if code >= 123 && theEvent.keyCode <= 126 {
        if let target=target{
            target.performSelector(action)
        }
    }
}

123到126的代码分别是左、右、下、上

于 2016-08-22T23:41:09.097 回答
0

刚遇到这个问题,我发现这条线会阻止向上/向下箭头键正确选择行。

[self.tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

我试图使用我自己的背景颜色,所以我添加了它。当我点击向上/向下时,它触发了shouldSelectRow:,但它始终为 0!注释掉上面的行为我修复了它。

于 2015-09-06T16:14:30.643 回答