NSAttributedString with different font size

amadehamadeh Membre

Bonjour,


 


Je cherche à  afficher un UILabel avec un attributedText qui contient une NSAttributedString avec deux chaà®nes ayant des UIFont différentes. J'arrive à  afficher une couleur différente sur la portion de la chaine que je veux mais je n'arrive pas à  changer la taille de la police de la partie que je veux. Voilà  mon code ci-dessous, y voyez-vous une erreur ?



var thePriceStr : NSString = "300 euros TTC(voir conditions)"
let generalFont : UIFont = UIFont(name: "OpenSans-Bold", size: 20)!
let generalAttribs = [NSFontAttributeName: generalFont]
var attrString = NSMutableAttributedString(string: String(thePriceStr), attributes: generalAttribs)

var firstRange = thePriceStr.rangeOfString("300 euros TTC")
var secondRange = thePriceStr.rangeOfString("(voir conditions)")

let color1 = UIColor.greenColor()
let font1 = UIFont(name: "Helvetica", size: 10)
let attributes1 = [NSFontAttributeName: font1!, NSForegroundColorAttributeName : color1]
attrString.setAttributes(attributes1, range: secondRange)

priceLabel!.attributedText = attrString

Réponses

  • DrakenDraken Membre

    Pourquoi ne pas créer deux textes et les additionner ensuite ?



    import UIKit

    func changerFont (texte:NSMutableAttributedString, font:UIFont)
    {
    texte.addAttribute(NSFontAttributeName, value: font, range:NSRange(location:0, length:texte.length))
    }

    func changerCouleur(texte:NSMutableAttributedString, couleur:UIColor) {
    texte.addAttribute(NSForegroundColorAttributeName, value: couleur, range:NSRange(location:0, length:texte.length))
    }

    class ViewController: UIViewController {

    override func viewDidLoad() {
    super.viewDidLoad()

    let monLabel = UILabel(frame: CGRectMake(0, 0, 300, 50))
    monLabel.textAlignment = .Center
    monLabel.center = self.view.center
    self.view.addSubview(monLabel)

    var prix = NSMutableAttributedString(string: "300 euros TTC")
    let generalFont = UIFont(name: "ArialMT", size: 20)
    changerFont(prix, generalFont!)

    var condition = NSMutableAttributedString(string: " (voir conditions)")
    let font1 = UIFont(name: "Helvetica", size: 10)
    changerFont(condition, font1!)
    changerCouleur(condition, UIColor.greenColor())

    prix.appendAttributedString(condition)

    monLabel.attributedText = prix
    }

    }


    il y a plus efficace, mais j'avais les routines sous la main.


     


     


  • AliGatorAliGator Membre, Modérateur
    SI ça peut t'aider à  créer des NSAttributedString plus facilement, j'ai un pod pour ça : https://github.com/AliSoftware/OHAttributedStringAdditions

    Ca ne fait rien que tu ne pourrais pas faire avec des "NSAttributedString(string: attribute: )" ou avec des "addAttribute(_:value:range: )" mais ça expose des méthodes bien plus jolies et logiques et une API bien plus intuitive à  utiliser, avec des setFont(_range:) et des setColor(_range:) etc.
  • amadehamadeh Membre
    mai 2015 modifié #4

    Salut,


     


    Merci chaleureusement pour votre aide. J'ai trouvé l'origine de mon bug, ça venait des fonts que j'avais définies pour des sizes classes particulières dans mon storyboard. J'ai pu testé ton pod Aligator et c'est juste beaucoup plus agréable de faire des NSattributedString.


     


    Je note cependant un point dont je n'ai pas la réponse. J'ai défini deux size classes et j'ai défini une font dans mon storyboard pour chacune d'elle. Quand j'utilise ta méthode setFont de ton pod, la font n'est pas celle que je définie dans le code mais celle du storyboard. Pourtant, je vois dans l'implémentation que tu fais un removeAttribute avant de redéfinir la font.


Connectez-vous ou Inscrivez-vous pour répondre.