2016-04-28 4 views
1

Я столкнулся с некоторой путаницей с тем, как я подклассифицирую NSPopUpButton, а именно, что я не могу установить attributedTitle как на кнопку (чтобы получить собственный шрифт, цвет и смещение базовой линии).Подкласс под NSPopUpButton attribitedTitle

Следующий код не имеет никакого эффекта:

class CustomPopUpButton: NSPopUpButton { 
    required init?(coder: NSCoder) { 
     super.init(coder: coder) 
     self.wantsLayer = true 
     self.layerContentsRedrawPolicy = .OnSetNeedsDisplay 

     self.attributedTitle = NSAttributedString(string: self.title, attributes: [ 
      NSFontAttributeName: NSFont(name: "Impact", size: 15)!, 
      NSForegroundColorAttributeName: NSColor(calibratedRed: 0.2, green: 0.270588235, blue: 0.031372549, alpha: 1), 
      NSBaselineOffsetAttributeName: 2 
     ]) 
    } 
} 

ответ

0

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

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

Вот окончательный код для моего NSPopUpButton подкласса с NSAttributedString с:

class CustomPopUpButton: NSPopUpButton { 
    required init?(coder: NSCoder) { 
     super.init(coder: coder) 

     setItemStyles() 
    } 

    override func addItemsWithTitles(itemTitles: [String]) { 
     super.addItemsWithTitles(itemTitles) 

     setItemStyles() 
    } 

    private func setItemStyles() { 
     for item in self.itemArray { 
      item.attributedTitle = NSAttributedString(string: item.title, attributes: [ 
       NSFontAttributeName: NSFont(name: "Impact", size: 15)!, 
       NSForegroundColorAttributeName: NSColor(calibratedRed: 0.2, green: 0.270588235, blue: 0.031372549, alpha: 1), 
       NSBaselineOffsetAttributeName: 2 
      ]) 
     } 
    } 
} 
1

Когда взглянуть на documentation, вы увидите, что NSPopUpButton работает только со строками.

Недвижимость attributedTitle относится только к ее суперклассу NSButton и поэтому не представлена ​​NSPopUpButton. Чтобы установить стандартное название, вы можете использовать метод setTitle.

Из документов:

Если приемник отображает всплывающее меню, этот метод изменяет текущий элемент будет элемент с указанным названием, добавив новый пункт под этим именем, если один не делает уже существует.

+0

Хм ... Тогда как же изменить шрифт, цвет, размер и т.д. кнопочные частей в 'NSPopUpButton'? Да, документация для 'setTitle' говорит, что она берет только строку, что имеет смысл, но это не говорит мне, что нет способа установить для нее' attributedTitle', особенно если это подкласс 'NSButton'. – jake

3

NSPopUpButton отображает выбранный пункт меню. Когда вы устанавливаете атрибутную строку в элементе меню, всплывающая кнопка отображает присвоенный заголовок.

+0

Позвольте мне попробовать ... – jake

 Смежные вопросы

  • Нет связанных вопросов^_^