我需要一个特殊的文本字段,应该执行以下操作:
我不知道该用什么。
NSTextView看起来不错,但是我无法在输入时设置操作并按Enter键导致换行
NSTextField没有tab-key支持,shift-enter无效。
任何想法?谢谢!
答案 0 :(得分:5)
最好的办法是将NSTextView
子类化,以获得所需的功能。这是一个简单的例子:
<强> MyTextView.h 强>
@interface MyTextView : NSTextView
{
id target;
SEL action;
}
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action;
@end
<强> MyTextView.m 强>
@implementation MyTextView
@synthesize target;
@synthesize action;
- (void)keyDown:(NSEvent *)theEvent
{
if ([theEvent keyCode] == 36) // enter key
{
NSUInteger modifiers = [theEvent modifierFlags];
if ((modifiers & NSShiftKeyMask) || (modifiers & NSAlternateKeyMask))
{
// shift or option/alt held: new line
[super insertNewline:self];
}
else
{
// straight enter key: perform action
[target performSelector:action withObject:self];
}
}
else
{
// allow NSTextView to handle everything else
[super keyDown:theEvent];
}
}
@end
设定目标和行动将按如下方式进行:
[myTextView setTarget:someController];
[mytextView setAction:@selector(omgTheUserPressedEnter:)];
有关密钥代码和NSResponder
个完整insertNewline:
条消息的详细信息,请参阅关于NSEvent
密钥代码的问题的优秀答案:Where can I find a list of key codes for use with Cocoa's NSEvent class?