Existe-t-il un moyen d'utiliser deux, voire trois couleurs de police dans une seule étiquette sous iOS?
Si le texte "bonjour, comment vas-tu" était utilisé comme exemple, le "bonjour" serait bleu et "comment vas-tu" serait vert?
Est-ce possible, cela semble plus facile que de créer plusieurs étiquettes?
Réponses:
Référence d'ici.
Tout d'abord, initialisez NSString et NSMutableAttributedString comme ci-dessous.
var myString:NSString = "I AM KIRIT MODI" var myMutableString = NSMutableAttributedString()
Dans ViewDidLoad
override func viewDidLoad() { myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!]) myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4)) // set label Attribute labName.attributedText = myMutableString super.viewDidLoad() }
PRODUCTION
COULEUR MULTIPLE
Ajoutez le code de ligne ci-dessous dans votre ViewDidLoad pour obtenir plusieurs couleurs dans une chaîne.
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location:10,length:5))
SORTIE couleur multiple
Swift 4
var myMutableString = NSMutableAttributedString(string: str, attributes: [NSAttributedStringKey.font :UIFont(name: "Georgia", size: 18.0)!]) myMutableString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRange(location:2,length:4))
la source
Pour @Hems Moradiya
let attrs1 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.greenColor()] let attrs2 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.whiteColor()] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.appendAttributedString(attributedString2) self.lblText.attributedText = attributedString1
Swift 4
let attrs1 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.green] let attrs2 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.white] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.append(attributedString2) self.lblText.attributedText = attributedString1
Swift 5
let attrs1 = [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedString.Key.foregroundColor : UIColor.green] let attrs2 = [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedString.Key.foregroundColor : UIColor.white] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.append(attributedString2) self.lblText.attributedText = attributedString1
la source
Swift 4
En utilisant la fonction d'extension suivante, vous pouvez directement définir un attribut de couleur sur une chaîne attribuée et appliquer la même chose sur votre étiquette.
extension NSMutableAttributedString { func setColorForText(textForAttribute: String, withColor color: UIColor) { let range: NSRange = self.mutableString.range(of: textForAttribute, options: .caseInsensitive) // Swift 4.2 and above self.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range) // Swift 4.1 and below self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range) } }
Essayez l'extension ci-dessus, en utilisant une étiquette:
let label = UILabel() label.frame = CGRect(x: 60, y: 100, width: 260, height: 50) let stringValue = "stackoverflow" let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue) attributedString.setColorForText(textForAttribute: "stack", withColor: UIColor.black) attributedString.setColorForText(textForAttribute: "over", withColor: UIColor.orange) attributedString.setColorForText(textForAttribute: "flow", withColor: UIColor.red) label.font = UIFont.boldSystemFont(ofSize: 40) label.attributedText = attributedString self.view.addSubview(label)
Résultat:
la source
Réponse mise à jour pour Swift 4
Vous pouvez facilement utiliser html dans la propriété attribuéText de UILabel pour effectuer facilement divers formats de texte.
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
Réponse mise à jour pour Swift 2
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" let encodedData = htmlString.dataUsingEncoding(NSUTF8StringEncoding)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
la source
Voici une solution pour Swift 5
let label = UILabel() let text = NSMutableAttributedString() text.append(NSAttributedString(string: "stack", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white])); text.append(NSAttributedString(string: "overflow", attributes: [NSAttributedString.Key.foregroundColor: UIColor.gray])) label.attributedText = text
la source
A utilisé la réponse de rakeshbs pour créer une extension dans Swift 2:
// StringExtension.swift import UIKit import Foundation extension String { var attributedStringFromHtml: NSAttributedString? { do { return try NSAttributedString(data: self.dataUsingEncoding(NSUTF8StringEncoding)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) } catch _ { print("Cannot create attributed String") } return nil } }
Usage:
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" label.attributedText = htmlString.attributedStringFromHtml
Ou même pour les monoplaces
label.attributedText = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>".attributedStringFromHtml
L'avantage de l'extension est que vous aurez un
.attributedStringFromHtml
attribut pour tous lesString
s dans toute votre application.la source
Je l'ai aimé de cette façon
let yourAttributes = [NSForegroundColorAttributeName: UIColor.black, NSFontAttributeName: UIFont.systemFontOfSize(15)] let yourOtherAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.systemFontOfSize(25)] let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes) let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes) let combination = NSMutableAttributedString() combination.appendAttributedString(partOne) combination.appendAttributedString(partTwo)
la source
MISE À JOUR pour SWIFT 5
func setDiffColor(color: UIColor, range: NSRange) { let attText = NSMutableAttributedString(string: self.text!) attText.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range) attributedText = attText }
SWIFT 3
Dans mon code, je crée une extension
import UIKit import Foundation extension UILabel { func setDifferentColor(string: String, location: Int, length: Int){ let attText = NSMutableAttributedString(string: string) attText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueApp, range: NSRange(location:location,length:length)) attributedText = attText } }
et ceci pour l'usage
override func viewDidLoad() { super.viewDidLoad() titleLabel.setDifferentColor(string: titleLabel.text!, location: 5, length: 4) }
la source
Se servir de
NSMutableAttributedString
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))
Voir plus de détails ici rapides utilisant-cordes attribué
la source
Swift 3.0
let myMutableString = NSMutableAttributedString( string: "your desired text", attributes: [:]) myMutableString.addAttribute( NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange( location:6, length:7))
Pour plus de couleurs, vous pouvez simplement continuer à ajouter des attributs à la chaîne mutable. Plus d'exemples ici .
la source
Extension Swift 4 UILabel
Dans mon cas, je devais être capable de définir fréquemment différentes couleurs / polices dans les étiquettes. J'ai donc créé une extension UILabel en utilisant l' extension NSMutableAttributedString de Krunal .
func highlightWords(phrases: [String], withColor: UIColor?, withFont: UIFont?) { let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self.text!) for phrase in phrases { if withColor != nil { attributedString.setColorForText(textForAttribute: phrase, withColor: withColor!) } if withFont != nil { attributedString.setFontForText(textForAttribute: phrase, withFont: withFont!) } } self.attributedText = attributedString }
Il peut être utilisé comme ceci:
yourLabel.highlightWords(phrases: ["hello"], withColor: UIColor.blue, withFont: nil) yourLabel.highlightWords(phrases: ["how are you"], withColor: UIColor.green, withFont: nil)
la source
Utilisez le cocoapod Prestyler :
Prestyle.defineRule("*", Color.blue) Prestyle.defineRule("_", Color.red) label.attributedText = "*This text is blue*, _but this one is red_".prestyled()
la source
Exemple Swift 3 utilisant la version HTML.
let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
la source
Voici le code qui prend en charge la dernière version de Swift en mars 2017.
Swift 3.0
Ici, j'ai créé une classe et une méthode Helper pour le
public class Helper { static func GetAttributedText(inputText:String, location:Int,length:Int) -> NSMutableAttributedString { let attributedText = NSMutableAttributedString(string: inputText, attributes: [NSFontAttributeName:UIFont(name: "Merriweather", size: 15.0)!]) attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0) , range: NSRange(location:location,length:length)) return attributedText } }
Dans les paramètres de méthode, inputText: String - votre texte à afficher à l'emplacement de l'étiquette: Int - où le style doit être application, "0" comme début de chaîne ou une valeur valide comme position de caractère de la longueur de la chaîne: Int - De l'emplacement jusqu'à combien de caractères ce style est applicable.
Consommer dans une autre méthode:
self.dateLabel?.attributedText = Helper.GetAttributedText(inputText: "Date : " + (self.myModel?.eventDate)!, location:0, length: 6)
Production:
Remarque: La couleur de l'interface utilisateur peut être définie comme couleur
UIColor.red
ou comme couleurs définies par l' utilisateur commeUIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0)
la source
func MultiStringColor(first:String,second:String) -> NSAttributedString { let MyString1 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.PUREBLACK] let MyString2 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.GREENCOLOR] let attributedString1 = NSMutableAttributedString(string:first, attributes:MyString1) let attributedString2 = NSMutableAttributedString(string:second, attributes:MyString2) MyString1.append(MyString2) return MyString1 }
la source
pour utiliser ce NSForegroundColorAttributeName dans la version inférieure rapide, vous pouvez obtenir des problèmes d'identifiant non résolus, changez ce qui précède en NSAttributedStringKey.foregroundColor .
ie, NSForegroundColorAttributeName == NSAttributedStringKey.foregroundColor
la source
Swift 4.2
let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = NSTextAlignment.center var stringAlert = self.phoneNumber + "로\r로전송인증번호를입력해주세요" let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringAlert, attributes: [NSAttributedString.Key.paragraphStyle:paragraphStyle, .font: UIFont(name: "NotoSansCJKkr-Regular", size: 14.0)]) attributedString.setColorForText(textForAttribute: self.phoneNumber, withColor: UIColor.init(red: 1.0/255.0, green: 205/255.0, blue: 166/255.0, alpha: 1) ) attributedString.setColorForText(textForAttribute: "로\r로전송인증번호를입력해주세요", withColor: UIColor.black) self.txtLabelText.attributedText = attributedString
Résultat
la source