Какао NSTextField - привязка и настройка атрибутов

  • У меня есть xib с меткой (TheLabel)... которая является NSTextField. Это текст не редактируется пользователем.
  • У меня есть значение привязано к NSString* в моем классе контроллера.
  • У меня есть его шрифт, связанный с NSFont * в моем классе контроллера.

Я могу изменить строку NSString в своем классе контроллера, и я вижу, что это отражено на этикетке.

Я могу изменить NSFont в своем классе контроллера, и я вижу, что это отражено на этикетке.

Но...

Я не могу на всю жизнь понять, как включить и выключить подчеркивание.

Если я вызову эту функцию...

-(void)setUnderlineType:(NSNumber*)underline
{
   NSMutableAttributedString* content = [[TheLabel attributedStringValue] mutableCopy];
   [content addAttribute:NSUnderlineStyleAttributeName value:underline range:NSMakeRange(0, content.length)];
   [TheLabel setAttributedStringValue:content];
}

... Я получаю подчеркивание, но тогда связанный шрифт игнорируется, и я получаю некоторый стандартный шрифт. С тех пор изменение NSFont в моем контроллере не оказывает видимого влияния на NSTextField.

Я пытался удалить атрибуты из 'содержимого' перед добавлением подчеркивания... удаление атрибутов шрифта... но это тоже не работает.

Каждый раз, когда я вызываю эту функцию, шрифт, связанный с NSTextField, становится "игнорируемым", и я вижу, что стандартный шрифт имеет стандартный размер.

Любое руководство будет с благодарностью.

1 ответ

Вам нужно установить NSFontAttributeName to update a font of NSAttributedString,

NSFont *font = ...;
NSMutableAttributedString* content = [[theLabel attributedStringValue] mutableCopy];
[content addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, content.length)];
[theLabel setAttributedStringValue:content];
Другие вопросы по тегам