Comment serait-il possible d'inclure du texte en gras et non en gras dans un uiLabel?
Je préfère ne pas utiliser un UIWebView .. J'ai également lu que cela peut être possible en utilisant NSAttributedString mais je ne sais pas comment l'utiliser. Des idées?
Apple y parvient dans plusieurs de ses applications; Exemples de captures d'écran:
Merci! - Dom
ios
objective-c
swift
uilabel
nsattributedstring
DomMaiocchi
la source
la source
Réponses:
Mettre à jour
Dans Swift, nous n'avons pas à nous occuper de vieux trucs iOS5, la syntaxe étant plus courte, tout devient vraiment simple:
Swift 5
Swift 3
Usage:
Bonus: internationalisation
Certaines personnes ont commenté l'internationalisation. Personnellement, je pense que cela sort du cadre de cette question, mais à des fins pédagogiques, voici comment je le ferais
Résultat (en supposant que les chaînes localisables anglaises et japonaises sont disponibles)
Réponse précédente pour iOS6 et versions ultérieures (Objective-C fonctionne toujours):
En iOS6
UILabel
,UIButton
,UITextView
,UITextField
, le soutien attribué des chaînes qui signifie que nous ne avons pas besoin de créerCATextLayer
de notre destinataire pour les chaînes attribuées. De plus, pour rendre la chaîne attribuée, nous n'avons plus besoin de jouer avec CoreText :) Nous avons de nouvelles classes dans obj-c Foundation.framework likeNSParagraphStyle
et d'autres constantes qui nous faciliteront la vie. Yay!Donc, si nous avons cette chaîne:
Il suffit de créer la chaîne attribuée:
Il y a quelques bons articles de blog d'introduction ici de la part de gars à invasivecode qui expliquent avec plus d'exemples d'utilisation de
NSAttributedString
, recherchez "Introduction à NSAttributedString pour iOS 6" et " Chaînes attribuées pour iOS utilisant Interface Builder" :)PS: Au-dessus du code cela devrait fonctionner mais il a été compilé par le cerveau. J'espère que ça suffit :)
Ancienne réponse pour iOS5 et inférieur
Utilisez un CATextLayer avec un NSAttributedString! beaucoup plus léger et plus simple que 2 UILabels. (iOS 3.2 et supérieur)
Exemple.
N'oubliez pas d'ajouter le framework QuartzCore (requis pour CALayers) et CoreText (requis pour la chaîne attribuée).
L'exemple ci-dessous ajoutera une sous-couche à la barre d'outils du contrôleur de navigation. à la Mail.app dans l'iPhone. :)
Dans cet exemple , je n'ai que deux types de polices de caractères différents (gras et normal) , mais vous pourriez aussi avoir différentes tailles de police, couleur différente, italique, souligné, etc. Jetez un oeil à NSAttributedString / NSMutableAttributedString et attributs CoreText clés de chaîne .
J'espère que ça aide
la source
[NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]
devient@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }
.{
), pas des crochets ([
).Essayez une catégorie sur UILabel:
Voici comment il est utilisé:
Et voici la catégorie
UILabel + Boldify.h
UILabel + Boldify.m
Notez que cela ne fonctionnera que dans iOS 6 et versions ultérieures. Il sera simplement ignoré dans iOS 5 et versions antérieures.
la source
@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}
J'ai voté[UIFont boldSystemFontOfSize:self.font.pointSize]
TO[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
C'est facile à faire dans Interface Builder :
1) Attribuer UILabel dans l' inspecteur d'attributs
2) sélectionnez la partie de la phrase que vous souhaitez mettre en gras
3) changer sa police (ou police en gras de la même police) dans le sélecteur de police
C'est tout!
la source
Il y a une catégorie basée sur la catégorie de bbrame. Cela fonctionne de manière similaire, mais vous permet de mettre en gras
UILabel
plusieurs fois les mêmes avec des résultats cumulatifs.UILabel + Boldify.h
UILabel + Boldify.m
Avec ces corrections, vous pouvez l'utiliser plusieurs fois, par exemple:
résultera avec: " Mise à jour: 14/10/2012 21:59 PM ".
la source
Cela a fonctionné pour moi:
Pour la version Swift: voir ici
la source
J'ai adopté la réponse de Crazy Yoghurt aux extensions de swift.
Il se peut qu'il n'y ait pas une bonne conversion entre Range et NSRange, mais je n'ai pas trouvé mieux.
la source
boldSubstring(_:)
pourvar range = text.string.range(of: substr, options: .caseInsensitive)
de faire des chaînes avec une capitalisation différente aussi gras.Consultez TTTAttributedLabel . C'est un remplacement direct pour UILabel qui vous permet d'avoir des polices et des couleurs mélangées dans une seule étiquette en définissant une NSAttributedString comme texte pour cette étiquette.
la source
Dans ce cas, vous pouvez essayer,
la source
Pour mettre du texte en gras ainsi que le souligner dans un UILabel. Ajoutez simplement les lignes suivantes dans votre code.
la source
Utilisez le code ci-dessous. J'espère que cela vous aidera.
la source
Swift 4:
la source
J'espère que celui-ci répondra à votre besoin. Fournissez la chaîne à traiter en entrée et fournissez les mots qui doivent être en gras / colorés en entrée.
Je vous remercie. Codage heureux.
la source
Pas besoin de NSRange avec le code suivant que je viens d'implémenter dans mon projet (en Swift):
la source
Si vous souhaitez faciliter l'utilisation des chaînes attribuées, essayez d'utiliser Créateur de chaînes attribuées, qui générera le code pour vous. https://itunes.apple.com/us/app/attributed-string-creator/id730928349
la source