没有Tab键的控件之间的“Tab”

时间:2010-08-03 18:43:09

标签: objective-c cocoa macos

我有一个窗口,可以使用tab和shift-tab键在其控件之间进行快速选项卡。但是,我还希望能够使用向上和向下箭头键在这些控件之间移动(在本例中)。如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

告诉窗口使当前视图的下一个/上一个键视图成为第一个响应者。

答案 1 :(得分:1)

对于非文本控件,你应该能够在响应者链中的某个地方(例如你的NSWindowController)获得这样的东西:

- (void)keyDown:(NSEvent *)event {
    NSWindow *window = [self window];

    switch ([[event characters] objectAtIndex:0]) {
        case NSUpArrowFunctionKey:
            [window makeFirstResponder:[[window firstResponder] previousValidKeyView]];
            break;
        case NSDownArrowFunctionKey:
            [window makeFirstResponder:[[window firstResponder] nextValidKeyView]];
             break;
       default:
            [super keyDown:event];
            break;
    }
}

在文本字段委托中:

- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command {
    NSWindow *window = [control window];

    if (command == @selector(moveUp:)) {
        [window makeFirstResponder:[[window firstResponder] previousValidKeyView]];
        return YES;
    } else if (command == @selector(moveDown:)) {
        [window makeFirstResponder:[[window firstResponder] nextValidKeyView]];
        return YES;
    }

    return NO;        
}

(对于文本视图委托,有一种类似的方法。)