用于特殊文本编辑的对象

时间:2010-12-18 21:29:37

标签: objective-c cocoa macos nstextfield nstextview

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

  • 标签键支持
  • 按下输入键时发送动作
  • alt +输入新行
  • shift +输入新行

我不知道该用什么。

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

NSTextField没有tab-key支持,shift-enter无效。

任何想法?谢谢!

1 个答案:

答案 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?