Изменение размера шрифта NSButton ничего не меняет

Я работаю над своим первым проектом Swift (ура), это приложение для Mac OS. Сейчас я хочу создать несколько кнопок с белым цветом текста и настраиваемым шрифтом. Поскольку мне нужен был новый атрибут на этой кнопке для хранения некоторых данных, я создал дочерний класс NSButton.

Теперь я знаю, что могу установить шрифт кнопки следующим образом:

super.font = NSFont(name: "NB-International-Pro", size: 40)

Что сработало как шарм. После этого я попытался изменить цвет текста следующим образом:

let pstyle = NSMutableParagraphStyle()
pstyle.alignment = .center
super.attributedTitle = NSAttributedString(string: (device?.name)!, attributes: [ NSForegroundColorAttributeName : NSColor.white, NSParagraphStyleAttributeName : pstyle ])

Это сработало, и это изменило цвет текста, однако теперь шрифт и размер шрифта вернулись к значениям по умолчанию. Есть ли возможность сделать и то, и другое?

Спасибо.


person wes.p    schedule 21.04.2017    source источник
comment
Для этого не обязательно создавать подкласс NSButton. Это легко сделать в вашем файле XIB. В инспекторе свойств Interface Builder выберите свою кнопку и установите для Типа значение «Мгновенное изменение», а затем введите buttonicon под изображением и buttonicon2 под альтернативой.   -  person KKRocks    schedule 21.04.2017


Ответы (1)


Вместо того, чтобы сначала устанавливать шрифт, включите имя и размер шрифта в свои атрибуты при создании своего NSAttributedString с помощью клавиш NSFontAttributeName и NSFontSizeAttribute:

attributedTitle = NSAttributedString(string: (device?.name)!, attributes: [ NSForegroundColorAttributeName : NSColor.white, NSParagraphStyleAttributeName : pstyle, NSFontAttributeName: "NB-International-Pro", NSFontSizeAttribute: 40])

Помимо этого, вы, вероятно, можете внести некоторые улучшения в архитектуру вашего кода. Создание подклассов NSButton на самом деле не требуется только для изменения стиля текста (может быть выполнено либо в .xib, либо в вашем контроллере представления).

person Oskar    schedule 21.04.2017