J'utilise une instance de UIWebView
pour traiter du texte et le colorier correctement, cela donne le résultat au format HTML mais plutôt que de l'afficher dans le UIWebView
Je veux l'afficher en utilisant Core Text
avec un NSAttributedString
.
Je suis capable de créer et de dessiner le NSAttributedString
mais je ne sais pas comment je peux convertir et mapper le HTML dans la chaîne attribuée.
Je comprends que sous Mac OS X NSAttributedString
a une initWithHTML:
méthode, mais il s'agissait d'un ajout uniquement Mac et n'est pas disponible pour iOS.
Je sais aussi qu'il y a une question similaire à celle-ci, mais elle n'a pas de réponse, je pensais que j'essaierais à nouveau et voir si quelqu'un a créé un moyen de le faire et si oui, s'il pouvait le partager.
Réponses:
Dans iOS 7, UIKit a ajouté une
initWithData:options:documentAttributes:error:
méthode qui peut initialiser un enNSAttributedString
utilisant HTML, par exemple:Dans Swift:
la source
Il existe un ajout open source en cours de développement à NSAttributedString par Oliver Drobnik sur Github. Il utilise NSScanner pour l'analyse HTML.
la source
La création d'un NSAttributedString à partir de HTML doit être effectuée sur le thread principal!
Mise à jour: Il s'avère que le rendu HTML de NSAttributedString dépend de WebKit sous le capot et doit être exécuté sur le thread principal, sinon il plantera parfois l'application avec un SIGTRAP .
Journal des plantages de New Relic:
Vous trouverez ci-dessous une extension Swift 2 String sécurisée pour les threads :
Usage:
Production:
la source
Extension d'initialisation Swift sur NSAttributedString
Mon inclination était d'ajouter ceci comme une extension à
NSAttributedString
plutôt queString
. Je l'ai essayé en tant qu'extension statique et initialiseur. Je préfère l'initialiseur qui est ce que j'ai inclus ci-dessous.Swift 4
Swift 3
Exemple
la source
guard ... NSMutableAttributedString(data:...
partry self.init(data:...
(et ajoutez-lesthrows
à l'init)Il s'agit d'une
String
extension écrite en Swift pour renvoyer une chaîne HTML sous la formeNSAttributedString
.Utiliser,
Dans ce qui précède, j'ai volontairement ajouté un unicode \ u2022 pour montrer qu'il restitue correctement unicode.
Un trivial: l'encodage par défaut qui
NSAttributedString
utilise estNSUTF16StringEncoding
(pas UTF8!).la source
Fait quelques modifications sur Andrew la solution d' et mise à jour du code vers Swift 3:
Ce code utilise maintenant UITextView comme
self
et peut hériter de sa police d'origine, de sa taille de police et de sa couleur de texteRemarque:
toHexString()
est l'extension d' iciExemple d'utilisation:
la source
Version de Swift 3.0 Xcode 8
la source
Swift 4
Usage
la source
La seule solution que vous avez actuellement est d'analyser le HTML, de créer des nœuds avec des attributs point / font / etc donnés, puis de les combiner dans un NSAttributedString. C'est beaucoup de travail, mais s'il est fait correctement, il peut être réutilisable à l'avenir.
la source
La solution ci-dessus est correcte.
Mais l'application wioll plante si vous l'exécutez sur iOS 8.1, 2 ou 3.
Pour éviter le plantage, ce que vous pouvez faire est: exécutez ceci dans une file d'attente. Pour qu'il soit toujours sur le fil principal.
la source
L'utilisation de NSHTMLTextDocumentType est lente et il est difficile de contrôler les styles. Je vous suggère d'essayer ma bibliothèque qui s'appelle Atributika. Il possède son propre analyseur HTML très rapide. Vous pouvez également avoir n'importe quel nom de balise et définir n'importe quel style pour eux.
Exemple:
Vous pouvez le trouver ici https://github.com/psharanda/Atributika
la source
Swift 3 :
Essayez ceci :
Et pour utiliser:
la source
Extensions utiles
Inspiré par ce fil, un pod et l'exemple ObjC d'Erica Sadun dans iOS Gourmet Cookbook p.80, j'ai écrit une extension encore
String
et encoreNSAttributedString
pour aller et venir entre les chaînes HTML simples et NSAttributedStrings et vice versa - sur GitHub ici , qui J'ai trouvé utile.Les signatures sont (encore une fois, le code complet dans un Gist, lien ci-dessus):
la source
avec police
Vous pouvez également utiliser les versions dont il a été dérivé et définir la police sur UILabel après avoir défini attribuéString
la source
La conversion intégrée définit toujours la couleur du texte sur UIColor.black, même si vous passez un dictionnaire d'attributs avec .forgroundColor défini sur autre chose. Pour prendre en charge le mode DARK sur iOS 13, essayez cette version de l'extension sur NSAttributedString.
la source