Редактор нестандартного поля не рисует

Я пытаюсь создать подкласс NSTokenField для перехвата некоторых событий клавиатуры. Я написал подклассы для NSTokenField, NSTokenFieldCell и NSTextView. В подклассе NSTokenField я заменяю обычную ячейку своей пользовательской ячейкой, а в настраиваемой ячейке перезаписываю -(NSTextView*)fieldEditorForView:(NSView *)aControlView для предоставления моего текстового представления в качестве редактора настраиваемых полей. Все методы инициализации вызываются, как и ожидалось, но по какой-то причине мое поле токена не отображается.

Вот код для подкласса NSTokenField:

@synthesize fieldEditor = _fieldEditor;

-(JSTextView *)fieldEditor
{
    if (!_fieldEditor) {
        _fieldEditor = [[JSTextView alloc] init];
        [_fieldEditor setFieldEditor:YES];
    }
    return _fieldEditor;
}

- (void)awakeFromNib {
    JSTokenFieldCell *newCell = [[JSTokenFieldCell alloc] init];
    [self setCell:newCell];
}

+ (Class) cellClass
{
    return [JSTokenFieldCell class];
}

- (id)initWithFrame:(NSRect)frameRect
{
    self = [super initWithFrame:frameRect];
    if (self) {
        JSTokenFieldCell *newCell = [[JSTokenFieldCell alloc] init];
        [self setCell:newCell];
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        JSTokenFieldCell *newCell = [[JSTokenFieldCell alloc] initWithCoder:aDecoder];
        [self setCell:newCell];
    }
    return self;
}

А вот код для подкласса NSTokenFieldCell:

-(NSTextView*)fieldEditorForView:(NSView *)aControlView
{
if ([aControlView isKindOfClass:[JSTokenField class]]) {
    JSTokenField *tokenField = (JSTokenField *)aControlView;
    return tokenField.fieldEditor;
    }
return nil;
}

- (id)initWithCoder:(NSCoder *)decoder
{
    return [super initWithCoder:decoder];
}

- (id)initTextCell:(NSString *)aString
{
    return [super initTextCell:aString];
}

- (id)initImageCell:(NSImage *)anImage
{
    return [super initImageCell:anImage];
}

прибавление

После дальнейшего копания я нашел этот пост, который говорит, что единственный способ иметь NSTokenField с настраиваемым представлением текста путем переопределения частных методов. Это правда? Если так, есть ли другой способ перехватить события клавиатуры без подклассов NSTextView?

0 ответов

Другие вопросы по тегам