使NSTableView处于活动状态

时间:2012-12-09 19:06:09

标签: objective-c macos cocoa nstableview nstextfield

可可诺布在这里。

我有一个简单的Mac应用程序,其中包含一个NSTextField,可以获取一些结果并将它们放入NSTableView中。我希望能够在文本字段中向上/向下按下以激活表格视图中的第一个/最后一个项目。

我做了以下事情:

- (void)keyUp:(NSEvent *)theEvent {
    switch([theEvent keyCode]) {
        case 125: {
            NSLog(@"I need to move down");
            NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:0];
            [resultsTableView selectRowIndexes:indexSet byExtendingSelection:NO];
            [resultsTableView becomeFirstResponder];
            break;
        }
        case 126: {
            NSLog(@"I need to move up");
            NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:[results count]-1];
            [resultsTableView selectRowIndexes:indexSet byExtendingSelection:NO];
            [resultsTableView becomeFirstResponder];
            break;
        }
    }
}

这部分是我想要的。它确实选择resultsTableView中的第一个或最后一个项目,但所选项目保持灰色,文本视图保持活动状态。

我认为在becomeFirstResponder上调用resultsTableView可以解决问题,但事实并非如此。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:12)

切勿直接致电becomeFirstResponder。使用NSWindow的makeFirstResponder:

[[resultsTableView window] makeFirstResponder:resultsTableView];