NSTextField, как адресная строка сафари - PullRequest
8 голосов
/ 13 января 2011

Как лучше всего создать адресное поле, подобное тому, которое есть в safari?

Необходимо иметь редактируемый текст и определять фон индикатора прогресса.

1 Ответ

4 голосов
/ 13 января 2011

Вы можете просто создать подкласс NSTextField и переопределить метод -drawRect:, чтобы "заполнить" соответствующий процент от всей ширины некоторым цветом или градиентом (или любым другим) для прогресса. Если я правильно понимаю ваш вопрос.

-(void)drawRect:(NSRect)dirtyRect {
    CGFloat progress = 0.33;

    NSRect progressRect = [self bounds];
    progressRect.size.width *= progress;

    [[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:1.0 alpha:0.4] set];
    NSRectFillUsingOperation(progressRect, NSCompositeSourceOver);

    [super drawRect:dirtyRect];
}

Очевидно, что "progress" будет исходить из свойства, которое вы объявляете, и обновляться в соответствии с моделью. Вам нужно убедиться, что setDrawsBackground: выключен, или фон установлен на [NSColor clearColor];, чтобы ваш пользовательский рисунок был виден.

Это кадр из кода выше.

Tested Theory

...