2011-10-28 37 views
0

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

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

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

有没有人有什么建议,我可以找到这个问题的根源?

+0

什么的'在笔尖refusesFirstResponder'设定值? – hamstergene

+0

你可以点击一行来选择它吗?它是否突出显示?在我的表格视图中,我可以开始使用向上箭头和向下箭头。 – paulmelnikow

+0

是的,我可以点击该行来选择它。然后,一旦我尝试点击错误键,什么都不会发生。我今晚会检查'refusesFirstResponder'的值。 – Kyle

回答

0

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

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

也许你可以在以下问题的伎俩调试响应链: How to inspect the responder chain?

+0

咦? “这不是默认行为”似乎与“NSTableView处理键盘事件”相矛盾。 – paulmelnikow

+0

如果我正确理解问题,Zenox假定NSTableView不处理键盘事件。这个假设是错误的。 NSTableView的默认实现提供键盘导航。 –

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

一个NSTableView也将不响应箭头键如果包含表NSWindow不是关键窗口。

最近遇到这种情况的情况是,如果NSWindow的“标题栏”外观选项未在界面生成器中设置:将NSWindow的默认行为更改为拒绝密钥状态。见-[NSWindow canBecomeKeyWindow]

因此,即使在将NSWindow作为没有标题栏的模式表单呈现时,标题栏选项也必须设置,否则关键事件将无法到达NSTableView。

0

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

[self.tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

我试图用我自己的背景颜色,所以我补充说。当我点击上/下,它触发了shouldSelectRow:,但它总是0!评论上面的这一行为我解决了这个问题。

0

我有同样的问题,用箭头键我的tableview的委托没有得到通知的变化。

这是我斯威夫特的解决方案:

首先子类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码的左,右,下,上分别

相关问题