Affichage de texte html dans uitextview
Comment puis-je afficher du texte HTML dans textview?
Par exemple,
string <h1>Krupal testing <span style="font-weight:
bold;">Customer WYWO</span></h1>
Supposons que le texte est en gras de sorte qu'il affiche dans le textview que le gras de la chaîne
mais je veux afficher du texte normal. Est-ce possible dans le SDK de l'iPhone?
Vous devez vous connecter pour publier un commentaire.
Utiliser une UIWebView sur iOS 5-.
Sur iOS 6+ vous pouvez utiliser
UITextView.attributedString
, voir https://stackoverflow.com/a/20996085 pour comment.Il y a aussi un sans-papiers
-[UITextView setContentToHTMLString:]
méthode. N'utilisez pas cette option si vous souhaitez soumettre à l'AppStore.Utilisation bloc de code suivant pour ios 7+.
NSAttributedString
àNSMutableAttributedString
et ajouter[attributedString addAttributes:@{NSFontAttributeName: font} range:NSMakeRange(0, attributedString.length)];
tv.frame = CGRectMake(0, 0, HUGE, 1); [tv sizeToFit];
NSMutableAttributedString *mString = [[NSMutableAttributedString alloc] initWithAttributedString:attributedString]; [mString addAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]} range:NSMakeRange(0, mString.length)];
Pour Swift 4 et Swift 4.2:
Pour Swift 3:
let path = Bundle.main.path(forResource: "styles", ofType: "css")
, d'obtenir le contenulet content = try! String(contentsOfFile: path!, encoding: String.Encoding.utf8)
et l'ajouter à la Chaîne htmlBHUPI réponse est bonne, mais si vous voulez combiner votre police personnalisée à partir de UILabel ou UITextView avec du contenu HTML, vous devez corriger votre code html un peu:
Vous pouvez voir la différence sur l'image ci-dessous:
Vous pouvez avoir un aperçu de la OHAttributedLabel classes, j'ai utilisé ces pour surmonter ce genre de problème avec mon textField. En cela, ils ont remplacé la méthode drawRect pour obtenir le style.
https://github.com/AliSoftware/OHAttributedLabel
Ma première réponse a été faite avant iOS 7 a introduit la prise en charge explicite de l'affichage attribué chaînes de contrôles communs. Vous pouvez maintenant définir
attributedText
deUITextView
à unNSAttributedString
créé à partir du contenu HTML à l'aide de:- initWithData:options:documentAttributes:erreur: (Apple Doc)
Réponse originale à cette question, conservé pour l'histoire:
Sauf si vous utilisez un
UIWebView
, votre solution sera de se fonder directement sur l'CoreText
. Comme ElanthiraiyanS points, certains projets open source ont vu le jour pour simplifier riche de rendu de texte. Je recommanderaisNSAttributedString-Ajouts-Pour-HTML(Edit: le projet a été supplantée DTCoreText), qui comprend des classes pour générer et afficher attribué chaînes de HTML.Réponse a monté à moi qu'à partir de BHUPI.
Le code de transfert swift comme ci-dessous:
Attention "allowLossyConversion: false,"
si vous définissez la valeur sur true, il va afficher du texte pur.
NSUnicodeStringEncoding
est correct, parce que NSString est encodé en Unicode, pas en UTF8. En cas de CJK personnage, vous n'aurez pas de bonne réponse.Pour Swift3
Pour certains cas UIWebView est une bonne solution. Parce que:
À l'aide de NSAttributedString peut conduire à des accidents, si le html est complexe et contient des tableaux (donc exemple)
Pour le chargement de texte pour l'affichage web, vous pouvez utiliser l'extrait de code suivant (juste un exemple):
Vous pouvez également utiliser d'une façon de plus. Three20 bibliothèque propose une méthode grâce à laquelle nous pouvons construire un style textView. Vous pouvez obtenir la bibliothèque ici: http://github.com/facebook/three20/
La classe TTStyledTextLabel a une méthode appelée textFromXHTML: je suppose que ce serait la fin. Mais il serait possible en mode readonly. Je ne pense pas que cela va permettre d'écrire ou de modifier du contenu HTML.
Il y a aussi une question qui peut vous aider concernant ce: HTML Chaîne de contenu pour UILabel et TextView
J'espère que sa utile.
NSDoc enregistrez le fichier texte dans une chaîne de caractères dans un fichier html en même temps de le charger dans une webview qui est dans le même endroit que votre UITextView..