カスタム NSTextField があり、角を丸くしています。
「TAB」キーを押しても、ウィンドウ内の次の NSTextField (または選択可能なコントロール) に移動しません。変。なぜそれをするのでしょうか?「TAB」を押したときにアプリが他のコントロールを通過できるようにするために追加する必要がある特別なものはありますか?
カスタム NSTextField があり、角を丸くしています。
「TAB」キーを押しても、ウィンドウ内の次の NSTextField (または選択可能なコントロール) に移動しません。変。なぜそれをするのでしょうか?「TAB」を押したときにアプリが他のコントロールを通過できるようにするために追加する必要がある特別なものはありますか?
うまくいけば、次のように、プログラムで、またはXcodeのインターフェイスビルダーでnextKeyViewを設定しました。
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.
私の解決策は素晴らしいものではありませんが、うまくいきます:
サブクラス 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