2014-09-17 5 views
5

का उपयोग कर पाठ का स्विफ्ट चेंज रंग मेरे पास UITableView है और मैं एक ही पंक्ति के भीतर अलग-अलग रंगों का उपयोग करके प्रत्येक पंक्ति का टेक्स्ट प्रदर्शित करना चाहता हूं।NSMutableAttributedStrings

मैं इस कोड की कोशिश की है, Obj सी से अनुवाद करने के लिए कोशिश कर रहा है, लेकिन मैं इसे

 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 

काम कर नहीं हो सकता है यह सब के उत्पादन enter image description here

जहां संख्या 34 object.valueForKey("example1")!.description के अनुरूप है , इसलिए समस्या यह है कि संख्या लाल नहीं है, और दूसरा भाग (object.valueForKey("example2")!.description) { द्वारा प्रतिस्थापित किया गया है।

यदि मैं NSAttributedString के बारे में कोड का यह टुकड़ा छोड़ देता हूं तो पंक्ति टेक्स्ट सही तरीके से प्रदर्शित होता है।

उत्तर

11

मुझे लगता है कि समस्या cell.textLabel?.attributedText के बजाय cell.textLabel?.text को असाइन करने में झूठ बोल सकती है। शायद इस तरह कुछ:

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 

यह सुनिश्चित नहीं था कि आप स्ट्रिंग का दूसरा भाग लाल या अन्य रंग होना चाहते हैं, इसलिए मैंने इसे काला बना दिया।

1

आप, NSMutableAttributedString का उपयोग कर से बचने कर सकते हैं और बस निर्माता के साथ विशेषताओं में पार कर लेते हैं:

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

यहाँ विशेषता पाठ का एक उदाहरण स्विफ्ट 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 
है
संबंधित मुद्दे