2

如何使用箭头键浏览我的表格视图。很像setAction:or setDoubleAction,但不是对点击做出反应,而是对在表格中向上或向下移动的箭头键做出反应。

4

4 回答 4

7

在您的表视图委托中,实现tableView:shouldSelectRow:. 随心所欲,然后返回YES。当您在表格视图中选择项目时,它将被触发。

于 2010-05-07T00:16:01.343 回答
4

我不确定您的意思,因为当我在表格中选择某些内容时,我可以使用箭头键在表格中上下移动。但是,如果您想更多地自定义行为,我有一个解决方案。在我的一个应用程序中,我想检测何时按下回车键或回车键,然后相应地执行一些操作。我创建了一个新类并将其设为 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
        }
    }
}
于 2010-05-06T10:43:27.037 回答
2

啊哈!你这样做是不是不小心破坏了 NSTableView ?

@implementation NSTableView ( DeleteKeyCategory )
-( void ) keyDown: ( NSEvent * ) event
{
   // ... do something ...

   [super keyDown:event];
}
@end

对我来说,这具有替换 NSTableView 的 keyDown: 例程的不良副作用,它破坏了光标键。(有点像调酒)

我学到的教训: - 完全避免使用 keyDown: 例程。- 从长远来看,继承 Apple NSControls 将节省工作。

这是使使用 NSTableView 非常令人沮丧的错误类型。也许苹果可以在静态分析器中检测到这种东西?

于 2014-07-16T20:51:29.887 回答
0

箭头用于选择,不用于执行任何操作。将应用于所选项目的操作通常由 TableView 的“action”或“doubleAction”属性设置。

单击表格行有两种不同的作用。

  1. 尝试选择表格行(有时表格行可以拒绝被选择,这就是为什么有一个“shouldSelect”委托方法)。

  2. 如果发生了新的选择,则执行操作(将 tableView 作为发送者)。在那里,您可以向桌子询问当前的选择,并对其进行任何您需要的操作。

请考虑有几个选定的行或选定的列或许多其他复杂情况的情况。

在您的情况下 --- 我建议您实施

selectionDidChange:(NSNotigivation)通知;

NSTableView 委托调用。这称为 AFTER 选择已更改,此时您知道新的当前选择,并对所选项目执行任何您想要的操作。

于 2012-05-06T16:24:44.297 回答