我有一个NSTableView没有响应向上/向下箭头键。根据我的理解,响应是默认行为,所以我不确定发生了什么(注意,我没有覆盖任何键盘命令)。我为表做的唯一设置是:
[tableView setDoubleAction: @selector(doubleClickedRow)];
[tableView setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[tableView registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]];
[tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal:NO];
但据我所知,这些都不会导致任何问题。
有没有人对我在哪里寻找这个问题的根源有任何建议?
答案 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代码分别为左,右,下和上