如何使用箭头键浏览我的表格视图。很像setAction:
or setDoubleAction
,但不是对点击做出反应,而是对在表格中向上或向下移动的箭头键做出反应。
4 回答
在您的表视图委托中,实现tableView:shouldSelectRow:
. 随心所欲,然后返回YES
。当您在表格视图中选择项目时,它将被触发。
我不确定您的意思,因为当我在表格中选择某些内容时,我可以使用箭头键在表格中上下移动。但是,如果您想更多地自定义行为,我有一个解决方案。在我的一个应用程序中,我想检测何时按下回车键或回车键,然后相应地执行一些操作。我创建了一个新类并将其设为 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
}
}
}
啊哈!你这样做是不是不小心破坏了 NSTableView ?
@implementation NSTableView ( DeleteKeyCategory )
-( void ) keyDown: ( NSEvent * ) event
{
// ... do something ...
[super keyDown:event];
}
@end
对我来说,这具有替换 NSTableView 的 keyDown: 例程的不良副作用,它破坏了光标键。(有点像调酒)
我学到的教训: - 完全避免使用 keyDown: 例程。- 从长远来看,继承 Apple NSControls 将节省工作。
这是使使用 NSTableView 非常令人沮丧的错误类型。也许苹果可以在静态分析器中检测到这种东西?
箭头用于选择,不用于执行任何操作。将应用于所选项目的操作通常由 TableView 的“action”或“doubleAction”属性设置。
单击表格行有两种不同的作用。
尝试选择表格行(有时表格行可以拒绝被选择,这就是为什么有一个“shouldSelect”委托方法)。
如果发生了新的选择,则执行操作(将 tableView 作为发送者)。在那里,您可以向桌子询问当前的选择,并对其进行任何您需要的操作。
请考虑有几个选定的行或选定的列或许多其他复杂情况的情况。
在您的情况下 --- 我建议您实施
selectionDidChange:(NSNotigivation)通知;
NSTableView 委托调用。这称为 AFTER 选择已更改,此时您知道新的当前选择,并对所选项目执行任何您想要的操作。