1

我需要一个特殊的文本字段来执行以下操作:

  • 多行
  • 制表键支持
  • 按下回车键时发送动作
  • alt+enter 换行
  • shift+enter 换行

我不知道该用什么。

NSTextView 看起来不错,但我无法在输入时设置操作并按下输入键会导致新行

NSTextField 没有制表键支持,并且 shift-enter 不起作用。

有任何想法吗?谢谢!

4

1 回答 1

5

您最好的选择是子类NSTextView化以获得您想要的功能。这是一个简单的例子:

MyTextView.h

@interface MyTextView : NSTextView
{
    id target;
    SEL action;
}
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action;
@end

我的文本视图.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在哪里可以找到用于 Cocoa 的 NSEvent 类的键码列表?

于 2010-12-18T22:00:21.287 回答