2014-10-21 6 views
14

sto cercando di impostare il carattere del UIBarButtonItem in questo modo:errore quando un'istanza di un UIFont in un testo attributi dizionario

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

Ma getta un errore di compilazione dicendo:

non può invocare 'init' con un elenco di argomenti tipo '($ T7, forState: UIControlState) `

e non ho idea di cosa significhi. Ho anche provato

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

ma sembra che non è assegnabile

Come posso risolvere questo?

risposta

27

L'inizializzatore di UIFont restituisce un optional perché può fallire a causa di errori di ortografia nome del font ecc

Dovete scartarlo e verificare:

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

aggiornato per Swift 3

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

Ancora gettando questo errore ... E questa sintassi funzionato per me fino a quando ho aggiornato a Xcode 6.1 – Eilon

+0

Questo risolto il mio problema, ma anche io non aveva mai visto questo problema prima 6.1. – Andrew

2

Impostazione carattere personalizzato è un po 'difficile, dal momento che non hanno font e title proprietà. Spero che questa risposta ti aiuti.

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 
1
if let font : UIFont = UIFont(name: "Roboto-Regular", size: 15) 
     { 
      cancelBarButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 
      doneBarButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 

     }