J'avais un UITextView
qui détecte les numéros de téléphone et les liens, mais cela remplace mon fontColor
et le change en blueColor
. Existe-t-il un moyen de formater la couleur des liens détectés automatiquement ou dois-je essayer une version manuelle de cette fonction?
iphone
uitextview
iphone-sdk-3.0
uicolor
Leandro Alves
la source
la source
Réponses:
Sur iOS 7, vous pouvez définir
tintColor
leUITextView
. Il affecte la couleur du lien ainsi que la ligne du curseur et la couleur du texte sélectionné.iOS 7 a également ajouté une nouvelle propriété à
UITextView
appelélinkTextAttributes
qui semblerait vous permettre de contrôler entièrement le style de lien.la source
NSFontAttributeName
aveclinkTextAttributes
. J'ai dû spécifier manuellement la police dans la même plage que monNSLinkAttributeName
Au lieu d'utiliser un UITextView, j'ai utilisé un UIWebView et activé les "liens de détection automatique". Pour changer la couleur du lien, il suffit de créer un CSS normal pour la balise.
J'ai utilisé quelque chose comme ça:
la source
Vous pouvez utiliser le
UIAppearance
protocole pour appliquer des modifications à toutes les vues de texte:Swift 4.x:
Swift 3.x:
Swift 2.x:
Objectif c:
L'apparence pour
UITextView
n'est pas documentée, mais fonctionne bien.Gardez à l'esprit les
UIAppearance
notes:En d' autres termes: Appeler ce code dans
init()
ouinit(coder:)
méthodes vont changer l' interface utilisateur apparence de l' objet, mais d' appeler àloadView()
ouviewDidLoad()
de viewController ne sera pas .Si vous souhaitez définir l'apparence de l'ensemble de l'application,
application(_:didFinishLaunchingWithOptions:)
c'est un bon endroit pour appeler un tel code.la source
Le problème avec UITextView
linkTextAttributes
est qu'il s'applique à tous les liens détectés automatiquement. Que faire si vous souhaitez que différents liens aient des attributs différents?Il s'avère qu'il y a une astuce: configurez les liens dans le cadre du texte attribué à la vue texte et définissez le
linkTextAttributes
sur un dictionnaire vide .Voici un exemple dans iOS 11 / Swift 4:
la source
Vous pouvez modifier la couleur du lien hypertexte dans un TextView comme suit:
Dans le fichier Nib, vous pouvez accéder à la fenêtre Propriétés et modifier la teinte en fonction de la couleur souhaitée.
ou vous pouvez également le faire par programme en utilisant le code ci-dessous
la source
La couleur de la teinte peut également être effectuée dans le storyboard
la source
J'ai trouvé en effet un autre moyen sans utiliser de vue Web mais gardez à l'esprit que cela utilise une API privée et peut être rejeté dans l'Appstore:
EDIT: Mon application a été approuvée par Apple bien que l'utilisation de l'API privée!
Déclarez d'abord une catégorie sur UITextView avec les méthodes
Ils font juste ce qui suit:
Maintenant, écrivez une méthode pour les liens colorés:
Il définit l'attribut de style avec une couleur spécifique sur tous les types de liens.
Les UITextViews sont rendus Webiview comme via des divs afin que vous puissiez même aller plus loin et colorer chaque type de lien séparément:
Le
x-apple-data-detectors-type="link"
est l'indicateur du type exact du lienÉDITER
Sur
iOS7
ce ne fonctionne plus. Dans iOS7, vous pouvez facilement changer la couleur du lien de UITextViews en définissant la couleur de teinte. Tu ne devrais pas appelerplus, vous obtiendrez une exception. À la place, procédez comme suit si vous souhaitez prendre en charge iOS 7 et les versions antérieures:
la source
Réponse Swift 5
Sympa et simple
la source
EDIT: Ne le faites pas avec
UITextView
, utilisez à laUIWebView
place.Vous devez créer une feuille de style pour cela. Définissez-y une classe avec la combinaison de couleurs dont vous avez besoin-
utilisez maintenant la classe 'headercopy' dans votre page html comme ceci-
cela affichera le numéro de téléphone dans la couleur dont vous avez besoin avec la fonctionnalité de clic.
la source
Ce code définira la couleur d'un numéro de téléphone sur un I-Phone mais annulera le lien d'appel automatique.
la source
Voici comment je l'ai fait avec Swift 5:
la source