Лучше всего подкласс 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
кодах клавиш: Где я могу найти список кодов клавиш для использования с классом какао NSEvent?