web-dev-qa-db-fra.com

Erreur lors de l'instanciation d'un UIFont dans un dictionnaire d'attributs de texte

J'essaie de définir la police de la UIBarButtonItem comme suit:

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

Mais il génère une erreur de compilation en disant: 

Impossible d'appeler 'init' avec un type de liste d'arguments '($ T7, forState: UIControlState) `

et je n'ai aucune idée de ce que cela signifie. J'ai aussi essayé 

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

mais il semble que ce ne soit pas assignable

Comment puis-je résoudre ça?

14
Eilon

L'initialiseur de UIFont renvoie une valeur facultative car il peut échouer à cause d'un nom de police mal orthographié, etc.

Vous devez le déballer et vérifier:

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

MISE À JOUR pour Swift 3

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

La définition d'une police personnalisée est un peu délicate, car elle ne possède pas les propriétés font et title. J'espère que cette réponse vous aidera.

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

        }
1
A.G

Avec Swift 4  

NSFontAttributeName est obsolète , vous pouvez utiliser les valeurs NSAttributedStringKey pour définir des attributs.

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
 navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: fontStyle]

}

0
Ekra