NSTableView不响应向上/向下箭头键

时间:2011-10-28 11:22:51

标签: cocoa nstableview arrow-keys

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

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

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

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

5 个答案:

答案 0 :(得分:2)

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

我最近遇到的情况就是NSWindow" Title Bar"在Interface Builder中未设置外观选项:它会更改NSWindow的默认行为以拒绝键状态。见-[NSWindow canBecomeKeyWindow]

因此,即使NSWindow被显示为没有标题栏的模态表,也必须设置标题栏选项或者键事件不会到达NSTableView。

答案 1 :(得分: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

答案 2 :(得分:0)

  

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

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

也许您可以使用以下问题中的技巧调试响应者链: How to inspect the responder chain?

答案 3 :(得分:0)

刚遇到此问题,我发现此行阻止上/下箭头键正确选择行。

[self.tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

我试图使用自己的背景颜色,所以我补充说。当我向上/向下轻触时,它会触发shouldSelectRow:,但它始终为0!评论出以上一行为我解决了这个问题。

答案 4 :(得分: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代码分别为左,右,下和上