我有一个自定义的NSTextField,我正在实现一些圆角。
按“TAB”键不会转到窗口中的下一个NSTextField(或可选控件)。奇怪的。为什么会这样做?在按“TAB”时,是否需要添加一些特殊内容以使应用程序能够通过其他控件?
答案 0 :(得分:11)
希望您以编程方式或在Xcode的界面构建器中设置nextKeyView,如下所示:
答案 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