7

カスタム NSTextField があり、角を丸くしています。

「TAB」キーを押しても、ウィンドウ内の次の NSTextField (または選択可能なコントロール) に移動しません。変。なぜそれをするのでしょうか?「TAB」を押したときにアプリが他のコントロールを通過できるようにするために追加する必要がある特別なものはありますか?

4

3 に答える 3

11

うまくいけば、次のように、プログラムで、またはXcodeのインターフェイスビルダーでnextKeyViewを設定しました。

nextKeyViewをあるテキストフィールドから次のテキストフィールドに設定します

于 2012-07-06T12:48:59.563 に答える
3

Seems like it was my fault.

I was incorporating delegate calls within the custom class for textDidBeginEditing: and textDidEndEditing:, in order to maintain the placeholder text when the user tabs out of the field, but I wasn't calling the respective super class' methods as well.

After including the call to [super textDidEndEditing...] and [super textDidBeginEditing...] tabbing works fine.

于 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 に答える