7

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

按“TAB”键不会转到窗口中的下一个 NSTextField(或可选控件)。奇怪的。为什么会这样做?当按下“TAB”时,我需要添加一些特别的东西来使应用程序能够通过其他控件吗?

4

3 回答 3

11

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

将 nextKeyView 从一个文本字段设置为下一个

于 2012-07-06T12:48:59.563 回答
3

好像是我的错。

textDidBeginEditing:我在and的自定义类中合并了委托调用textDidEndEditing:,以便在用户跳出字段时维护占位符文本,但我也没有调用相应的超类的方法。

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

于 2012-07-06T13:56:21.380 回答
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
于 2014-05-21T21:43:29.467 回答