Кольцо фокусировки в редакторе полей для NSTextFieldCell в NSTableView

У меня есть NSTableView на основе ячеек с текстовой ячейкой в ​​определенном столбце. Я хочу предоставить редактор настраиваемых полей, чтобы я мог выполнять автозаполнение без нажатия F5 пользователем.

@implementation AutoCompleteFieldEditorTextView

-(id)init
{
    self = [super init];
    if (self)
    {
        self.focusRingType = NSFocusRingTypeDefault;
        self.fieldEditor = YES;
    }
    return self;
}

@end

Это работает нормально, за исключением того, что кольца фокусировки не существует. Даже если я добавлю:

-(void)drawFocusRingMask
{
    NSRectFill([self bounds]);
}

-(NSRect)focusRingMaskBounds
{
    return [self bounds];
}

это все еще не работает. Как я могу получить точное кольцо фокусировки, которое появляется с NSTextView по умолчанию, используемым в качестве редактора полей в NSTableView?


person Trygve    schedule 25.06.2018    source источник
comment
Я думаю, что ячейка рисует кольцо фокусировки в drawFocusRingMaskWithFrame:inView:. Похоже, есть ошибка в кольце фокусировки в табличном представлении на основе ячеек. Я попробовал табличное представление на основе ячеек в новом проекте, и кольцо фокусировки не работает должным образом. В старом проекте без ARC работает нормально.   -  person Willeke    schedule 26.06.2018
comment
Этот проект основан на ячейке и не имеет ARC. Кольцо фокусировки работает нормально, пока я не заменю его подклассом NSTextView (указанным с помощью fieldEditorForView:). С поставляемым ОС все в порядке, но как только я подклассифицирую его, это не так.   -  person Trygve    schedule 26.06.2018


Ответы (1)


У меня такая же проблема, и для решения я использую следующий подход. Этот метод перегружен в пользовательском NSTextFieldCell, который создает и возвращает ваш пользовательский NSTextView:

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
      [super drawInteriorWithFrame:cellFrame inView:controlView];

      if([controlView.window firstResponder] == self.maskTextField)
      {
         [super drawFocusRingMaskWithFrame:cellFrame
                                    inView:controlView];
      }
}

Надеюсь, это поможет кому-то в будущем.

person toohtik    schedule 12.12.2018