【问题标题】:Make NSTableView active使 NSTableView 处于活动状态
【发布时间】:2012-12-09 19:06:09
【问题描述】:

这里是可可菜鸟。

我有一个简单的 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 中的第一个或最后一个项目,但所选项目保持灰色,并且文本视图保持活动状态。

我认为在resultsTableView 上调用becomeFirstResponder 会成功,但事实并非如此。

任何帮助将不胜感激!

【问题讨论】:

    标签: objective-c macos cocoa nstableview nstextfield


    【解决方案1】:

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

    [[resultsTableView window] makeFirstResponder:resultsTableView];
    

    【讨论】:

    • 我刚碰到这个,有什么想法为什么我们必须通过窗口而不是响应者自己进行调用?
    • Because Apple said so becomeFirstResponder "永远不要直接调用这个方法。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多