如何使用箭头键浏览表格视图。与setAction:
或setDoubleAction
非常相似,但不是对点击作出反应,而是通过在桌子上向上或向下移动的箭头键做出反应。
答案 0 :(得分:7)
在表格视图委托中,实施tableView:shouldSelectRow:
。做任何你想做的事,然后返回YES
。当您在表格视图中选择项目时,它会被触发。
答案 1 :(得分:3)
我不确定你的意思是因为当我在桌子上选择某些东西时,我可以使用箭头键在桌子中上下移动。但是如果你想更多地定制行为我有一个解决方案。在我的一个应用程序中,我想检测何时按下return或enter键,然后相应地执行一些操作。我创建了一个新类,并使其成为NSWindow的子类。在界面构建器中,我将主窗口设置为此类。然后我重写该子类中的NSWindow的keyDown:方法。因此,只要我的主窗口位于最前面(第一响应者),就会检测到按键并通过该方法进行过滤。我相信你可以为箭头按压做类似的事情。您可能希望使您的类成为NSTableView的子类而不是NSWindow,具体取决于您希望如何捕获按键。我希望它适用于整个应用程序,但您可能希望它仅在表视图是第一响应者时才能工作。
- (void)keyDown:(NSEvent *)theEvent {
if ([theEvent type] == NSKeyDown) {
NSString* characters = [theEvent characters];
if (([characters length] > 0) && (([characters characterAtIndex:0] == NSCarriageReturnCharacter) || ([characters characterAtIndex:0] == NSEnterCharacter))) {
// do something here when return or enter is pressed
}
}
}
答案 2 :(得分:2)
AHA!这样做是不是意外地打破了NSTableView?
@implementation NSTableView ( DeleteKeyCategory )
-( void ) keyDown: ( NSEvent * ) event
{
// ... do something ...
[super keyDown:event];
}
@end
对我来说,这有替换NSTableView的keyDown:例程的恶意副作用,它打破了光标键。 (有点像调酒)
我学到的经验教训: - 完全避免使用keyDown:例程。 - 从长远来看,继承Apple NSControls将节省工作。
这种错误使得使用NSTableView非常令人沮丧。 也许Apple可以在静态分析仪中检测到这种情况?
答案 3 :(得分:0)
箭头用于选择,而不是用于执行任何操作。将应用于所选项的操作通常由TableView的“action”或“doubleAction”属性设置。
点击表格行可以做两件事。
TRIES选择表格行(有时表格行可以选择REFUSE,这就是为什么有“shouldSelect”委托方法)。
如果发生了新选择,则执行操作(将tableView作为发件人)。在那里,您可以向表格询问当前的选择,并随心所欲地做任何事情。
请考虑有多个选定行,选定列或许多其他复杂情况时的情况。
在你的情况下---我建议的是你实施
selectionDidChange:(NSNotigivation)通知;
NSTableView委托调用。这称为AFTER选择已更改,然后您知道新的当前选择,并对所选项目执行任何操作。