如何以编程方式控制NSPopUpButton上的TAB键按事件

时间:2014-08-22 22:50:41

标签: macos xcode5.1 nspopupbutton

我正在使用Xcode5为MacOSX开发应用程序

我想控制当我在选中的NSPopUpButton上按Tab键时,我创建了自己的NSPopUpButton子类名为MyNSPopUpButton并将其放入:

-(BOOL)canBecomeKeyView{
    return YES;
}

现在我无法通过按Tab键选择我的NSPopupButtons,但我想控制从那里去的地方,在NSTextFields上我使用这个方法:

-(BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector{

    NSTextField     *textField  = (NSTextField *) control;

    if (commandSelector == @selector(insertTab:) ||
        commandSelector == @selector(insertNewline:)) {


        if (textField == _diaTextField) {
            [self.window makeFirstResponder:_cantidadDebeTextField];
        }

        if (textField == _cantidadDebeTextField) {
            [self.window makeFirstResponder:_cuentaDebePopupButton];
        }

        if (textField == _cantidadHaberTextField) {
            [self.window makeFirstResponder:_descripcionAsientoTextField];
        }

        if (textField == _descripcionAsientoTextField) {
            [self.window makeFirstResponder:_descripcionBitacoraTextField];
        }

        if (textField == _descripcionBitacoraTextField) {
            [self.window makeFirstResponder:nil];
        }

        return YES;
    }
    return NO;
}

正如你所看到的那样我用TAB键控制导航,我想用NSPopUpButtons做同样的事情,但我甚至无法像NSTextFields一样设置它们的任何代表,

我知道我可以通过以正确的顺序设置标签号来做到这一点,但我会以编程方式在运行时添加更多控件

有没有办法从代码???

控制它

感谢您的支持

1 个答案:

答案 0 :(得分:4)

您关闭窗口上的autorecalculatesKeyViewLoop并自行设置关键视图循环。您可以通过设置所有视图的nextKeyView属性来实现。它们应该形成一个循环。

您可能也希望设置窗口的initialFirstResponder

添加视图时,您需要调整关键视图循环以将其包含在所需位置。