Le problème que je rencontre est que je veux pouvoir changer le textColor de certains textes dans un TextView. J'utilise une chaîne concaténée et je veux juste les chaînes que j'ajoute dans le texte du TextView. Il semble que ce que je veux utiliser NSMutableAttributedString
, mais je ne trouve aucune ressource sur la façon de l'utiliser dans Swift. Ce que j'ai jusqu'à présent, c'est quelque chose comme ça:
let string = "A \(stringOne) with \(stringTwo)"
var attributedString = NSMutableAttributedString(string: string)
textView.attributedText = attributedString
À partir de là, je sais que je dois trouver la plage de mots dont la couleur de texte doit être modifiée, puis les ajouter à la chaîne attribuée. Ce que j'ai besoin de savoir, c'est comment trouver les chaînes correctes à partir de la chaîne attribuée, puis modifier leur textColor.
Comme j'ai une note trop basse, je ne peux pas répondre à ma propre question, mais voici la réponse que j'ai trouvée
J'ai trouvé ma propre réponse en traduisant en traduisant du code de
Modifier les attributs des sous-chaînes dans un NSAttributedString
Voici l'exemple d'implémentation dans Swift:
let string = "A \(stringOne) and \(stringTwo)"
var attributedString = NSMutableAttributedString(string:string)
let stringOneRegex = NSRegularExpression(pattern: nameString, options: nil, error: nil)
let stringOneMatches = stringOneRegex.matchesInString(longString, options: nil, range: NSMakeRange(0, attributedString.length))
for stringOneMatch in stringOneMatches {
let wordRange = stringOneMatch.rangeAtIndex(0)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.nameColor(), range: wordRange)
}
textView.attributedText = attributedString
Puisque je souhaite changer le textColor de plusieurs chaînes, je vais créer une fonction d'assistance pour gérer cela, mais cela fonctionne pour changer le textColor.
la source
Réponses:
Je vois que vous avez un peu répondu à la question, mais pour fournir une manière un peu plus concise sans utiliser de regex pour répondre à la question du titre:
Pour changer la couleur d'une longueur de texte, vous devez connaître l'index de début et de fin des caractères à colorier dans la chaîne, par exemple
Ensuite, vous convertissez en chaîne attribuée et utilisez 'ajouter un attribut' avec NSForegroundColorAttributeName:
Une liste d'autres attributs standard que vous pouvez définir se trouve dans la documentation d'Apple
la source
main_string
,string_to_color
etrange
n'ont jamais été mutés. Pensez à les changer enlet
constant?SWIFT 5
SWIFT 4.2
la source
Mise à jour Swift 2.1:
self.helpText
est unUILabel
exutoire.la source
Swift 4.2 et Swift 5 colorisent des parties de la corde.
Un moyen très simple d'utiliser NSMutableAttributedString tout en étendant le String. Cela peut également être utilisé pour colorer plus d'un mot dans toute la chaîne.
Ajouter un nouveau fichier pour les extensions, Fichier -> Nouveau -> Fichier Swift avec un nom par ex. "NSAttributedString + TextColouring" et ajoutez le code
Vous pouvez maintenant utiliser globalement sur n'importe quel viewcontroller de votre choix:
la source
La réponse est déjà donnée dans les articles précédents mais j'ai une manière différente de le faire
Swift 3x:
J'espère que cela aide n'importe qui!
la source
La réponse de Chris m'a beaucoup aidé, alors j'ai utilisé son approche et je suis devenue une fonction que je peux réutiliser. Cela me permet d'assigner une couleur à une sous-chaîne tout en donnant au reste de la chaîne une autre couleur.
la source
Swift 4.1
par exemple si vous souhaitez changer de police dans NavBar:
la source
Vous pouvez utiliser cette extension, je la teste
rapide 4.2
la source
Swift 2.2
la source
.CGColor
.Le moyen le plus simple de créer des étiquettes avec un style différent tel que la couleur, la police, etc. est d'utiliser la propriété "Attribuée" dans l'inspecteur d'attributs. Choisissez simplement une partie du texte et modifiez-la comme vous le souhaitez
la source
Basé sur les réponses avant de créer une extension de chaîne
Vous pouvez transmettre les attributs du texte à la méthode
Appelez comme ça
la source
Swift 4.1
J'ai changé de cela dans Swift 3
Et cela dans Swift 4.0
vers Swift 4.1
Fonctionne bien
la source
rapide 4.2
la source
Pour tous ceux qui recherchent " Appliquer une couleur spécifique à plusieurs mots dans le texte ", nous pouvons le faire en utilisant NSRegularExpression
Lien de référence: https://gist.github.com/aquajach/4d9398b95a748fd37e88
la source
la source
Avec cette fonction simple, vous pouvez attribuer le texte et mettre en évidence le mot choisi.
Vous pouvez également changer UITextView en UILabel , etc.
la source
Pour changer la couleur de la couleur de la police, sélectionnez d'abord attribué au lieu de uni comme dans l'image ci-dessous
Vous devez ensuite sélectionner le texte dans le champ attribué, puis sélectionner le bouton de couleur sur le côté droit des alignements. Cela changera la couleur.
la source
Vous pouvez utiliser cette méthode. J'ai implémenté cette méthode dans ma classe utilitaire commune pour accéder globalement.
la source
Si vous utilisez Swift 3x et UITextView, peut-être que NSForegroundColorAttributeName ne fonctionnera pas (cela n'a pas fonctionné pour moi quelle que soit l'approche que j'ai essayée).
Donc, après quelques recherches, j'ai trouvé une solution.
la source
Un moyen très simple de le faire.
Pour plus de détails, cliquez ici: https://github.com/iOSTechHub/AttributedString
la source
Vous devez modifier les paramètres d'affichage du texte, pas les paramètres de la chaîne attribuée
la source
Veuillez vérifier cocoapod Prestyler :
la source
}
la source
Vous pouvez utiliser comme simple extension
la source