Настройка UIBarButtonItem в Swift

Я пытаюсь установить шрифт UIBarButtonItem в AppDelegate следующим образом:

let barButton = UIBarButtonItem.appearance()
barButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "AvenirNext", size: 15], forState: UIControlState.Normal)

Но это бросает мне ошибку компилятора:

Cannot invoke 'init' with an argument list type '($T7, forState: UIControlState)

и я понятия не имею, что это значит

Я также пробовал

barButton.titleTextAttributesForState(UIControlState.Normal) =[NSFontAttributeName...]

но кажется, что он не может быть назначен

Как я могу это сделать? большое спасибо!

Ответы

Ответ 1

Инициализатор UIFont возвращает необязательный, поскольку он может завершиться неудачно из-за неправильного имени шрифта и т.д.

Вам нужно развернуть его и проверить:

if let font = UIFont(name: "AvenirNext", size: 15) {
    barButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal)
}

ОБНОВЛЕНО для Swift 3

if let font = UIFont(name: "AvenirNext", size: 15) {
    barButton.setTitleTextAttributes([NSFontAttributeName:font], for: .normal)
}

Ответ 2

Настройка пользовательского шрифта немного сложна, поскольку у них нет свойств font и title. Надеюсь, следующий ответ вам поможет.

let font = UIFont(name: "<your_custom_font_name>", size: <font_size>)
var leftBarButtonItem = UIBarButtonItem(title: "<font_hex_code>", style: UIBarButtonStyle.Plain, target: self, action: "buttonClicked:")
leftBarButtonItem.setTitleTextAttributes([NSFontAttributeName:font!], forState: UIControlState.Normal)
self.navigationItem.leftBarButtonItem = leftBarButtonItem

Ответ 3

if let font : UIFont = UIFont(name: "Roboto-Regular", size: 15)
        {
            cancelBarButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal)
            doneBarButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal)

        }