自定义NSTextField中的TAB不会将焦点放在另一个控件上

时间:2012-07-06 11:38:34

标签: objective-c macos nstextfield nscontrol

我有一个自定义的NSTextField,我正在实现一些圆角。

按“TAB”键不会转到窗口中的下一个NSTextField(或可选控件)。奇怪的。为什么会这样做?在按“TAB”时,是否需要添加一些特殊内容以使应用程序能够通过其他控件?

3 个答案:

答案 0 :(得分:11)

希望您以编程方式或在Xcode的界面构建器中设置nextKeyView,如下所示:

set nextKeyView from one text field to the next

答案 1 :(得分:2)

好像是我的错。

我在textDidBeginEditing:textDidEndEditing:的自定义类中加入了委托调用,以便在用户选中字段时维护占位符文本,但我没有调用相应的超级类的方法也是如此。

包括对[super textDidEndEditing...][super textDidBeginEditing...]标签的调用后工作正常。

答案 2 :(得分:1)

我的解决方案不是很好,但有效:

子类NSTextView

#import <Cocoa/Cocoa.h>

@interface NMTextView : NSTextView

@end


#import "NMTextView.h"

@implementation NMTextView

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"

- (void)keyDown:(NSEvent *)theEvent{

    switch ([theEvent keyCode]) {
        case 36:{
            if (([theEvent modifierFlags] & NSCommandKeyMask))
                //something for Ctrl+Enter
            else
                [super insertNewlineIgnoringFieldEditor:self];
        }break;

        case 48:
            //[self nextKeyView] = _NSClipViewOverhangView
            //[[self nextKeyView] nextKeyView] = NSTokenField (in my case)
            // or something different
            [[[self nextKeyView] nextKeyView] becomeFirstResponder];
            //also http://stackoverflow.com/a/3008622/1067147
        break;

        case 53:
            [_target performSelector:_actionEsc withObject:self];
        break;

        default:// allow NSTextView to handle everything else
            [super keyDown:theEvent];
        break;
    }
}

#pragma clang diagnostic pop

@end