2014-09-17 13 views
5

Ho una UITableView e mi desidera visualizzare il testo di ogni fila utilizzando colori differenti all'interno della stessa linea.Swift cambiare colore di testo utilizzando NSMutableAttributedStrings

Ho provato questo codice, cercando di tradurre da Obj-C ma non posso averlo lavorare

 let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject 

     var attrString: NSMutableAttributedString = NSMutableAttributedString(string: object.valueForKey("example1")!.description) 
     attrString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSMakeRange(0, attrString.length)) 

     var stringToCell:String = String(format: "%@ %@", attrString, object.valueForKey("example2")!.description) 
     cell.textLabel?.text = stringToCell 

L'uscita di tutto questo è enter image description here

cui il numero 34 corrisponde a object.valueForKey("example1")!.description , quindi il problema è che il numero è non rosso, e la seconda parte (object.valueForKey("example2")!.description) è sostituito da {.

Se lascio questo pezzo di codice in materia NSAttributedString il testo riga viene visualizzato correttamente.

risposta

11

Penso che il problema potrebbe consistere nell'assegnare a cell.textLabel?.text anziché cell.textLabel?.attributedText. Forse qualcosa di simile:

let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject 

var attrString: NSMutableAttributedString = NSMutableAttributedString(string: object.valueForKey("example1")!.description) 
attrString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSMakeRange(0, attrString.length)) 

var descString: NSMutableAttributedString = NSMutableAttributedString(string: String(format: " %@", object.valueForKey("example2")!.description)) 
descString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blackColor(), range: NSMakeRange(0, descString.length)) 

attrString.appendAttributedString(descString); 
cell.textLabel?.attributedText = attrString 

non era sicuro se si voleva la seconda parte della stringa di essere rosso o un altro colore così ho fatto di nero.

1

Se è possibile, evitare di utilizzare NSMutableAttributedString e basta passare negli attributi con il costruttore:

private func PullToRefreshAttributedStringWithColor(color:UIColor) -> NSAttributedString { 
    return NSAttributedString(string: "Pull to Refresh", attributes: [ 
     NSForegroundColorAttributeName:color 
    ]) 
} 
1

Ecco un esempio di testo dell'attributo Swift 3

let mainText = "Here is a example of attributedString" 
let attributeText = "attributedString" 
let range = (mainText as NSString).range(of: attributeText) 
let attributedString = NSMutableAttributedString(string:mainText) 

attributedString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: range) 
attribute.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: 14) , range: range) 

lblTitle.attributedText = attributedString