在uitextview中显示html文本

如何在textview中显示HTML文本?

例如,

string <h1>Krupal testing <span style="font-weight: bold;">Customer WYWO</span></h1> 

假设文本是粗体的,所以在textview中显示为粗体string,但我想显示普通文本。 这在iPhone SDK中可能吗?

在iOS 5上使用UIWebView。

在iOS 6+上,您可以使用UITextView.attributedString ,请参阅https://stackoverflow.com/a/20996085


还有一个没有logging的 -[UITextView setContentToHTMLString:]方法。 如果你想提交给AppStore,请不要使用它。

为ios 7+使用以下代码块。

 NSString *htmlString = @"<h1>Header</h1><h2>Subheader</h2><p>Some <em>text</em></p><img src='http://blogs.babble.com/famecrawler/files/2010/11/mickey_mouse-1097.jpg' width=70 height=100 />"; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding] options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes: nil error: nil ]; textView.attributedText = attributedString; 

对于Swift 4:

 let htmlString = "<html>" + "<head>" + "<style>" + "body {" + "background-color: rgb(230, 230, 230);" + "font-family: 'Arial';" + "text-decoration:none;" + "}" + "</style>" + "</head>" + "<body>" + "<h1>A title</h1>" + "<p>A paragraph</p>" + "<b>bold text</b>" + "</body></head></html>" let htmlData = NSString(string: htmlString).data(using: String.Encoding.unicode.rawValue) let options = [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html] let attributedString = try! NSAttributedString(data: htmlData!, options: options, documentAttributes: nil) textView.attributedText = attributedString 

对于Swift 3

 let htmlString = "<html>" + "<head>" + "<style>" + "body {" + "background-color: rgb(230, 230, 230);" + "font-family: 'Arial';" + "text-decoration:none;" + "}" + "</style>" + "</head>" + "<body>" + "<h1>A title</h1>" + "<p>A paragraph</p>" + "<b>bold text</b>" + "</body></head></html>" let htmlData = NSString(string: htmlString).data(using: String.Encoding.unicode.rawValue) let attributedString = try! NSAttributedString(data: htmlData!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) textView.attributedText = attributedString 

你可以看看OHAttributedLabel类,我用这些来克服我的textField这种问题。 在这里,他们已经重写了drawRect方法来获得所需的样式。

https://github.com/AliSoftware/OHAttributedLabel

BHUPI的

答案是正确的,但是如果您想要将来自UILabel或UITextView的自定义字体与HTML内容相结合,则需要更正您的html:

 NSString *htmlString = @"<b>Bold</b><br><i>Italic</i><p> <del>Deleted</del><p>List<ul><li>Coffee</li><li type='square'>Tea</li></ul><br><a href='URL'>Link </a>"; htmlString = [htmlString stringByAppendingString:@"<style>body{font-family:'YOUR_FONT_HERE'; font-size:'SIZE';}</style>"]; /*Example: htmlString = [htmlString stringByAppendingString:[NSString stringWithFormat:@"<style>body{font-family: '%@'; font-size:%fpx;}</style>",_myLabel.font.fontName,_myLabel.font.pointSize]]; */ NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding] options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes: nil error: nil ]; textView.attributedText = attributedString; 

U可以看到下面的图片的区别: 在这里输入图像说明

我的第一个回应是在iOS 7引入显式支持来显示普通控件中的属性string之前做出的。 您现在可以使用UITextView命令将UITextView attributedText设置为从HTML内容创build的NSAttributedString

 -(id)initWithData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error 

– initWithData:options:documentAttributes:error:(Apple Doc)

原始答案,保留历史:

除非你使用UIWebView ,否则你的解决scheme将直接依赖于CoreText 。 正如ElanthiraiyanS指出的,一些开源项目已经出现,以简化富文本渲染。 我会推荐NSAttributedString-Additions-For-HTML编辑:该项目已经取代DTCoreText ),其特点是生成和显示来自HTML的属性string的类。

答案已经适合我从BHUPI。

代码转移到swift如下所示:

注意“allowLossyConversion:false”

如果将该值设置为true,则会显示纯文本。

 let theString = "<h1>H1 title</h1><b>Logo</b><img src='http://www.aver.com/Images/Shared/logo-color.png'><br>~end~" let theAttributedString = try! NSAttributedString(data: theString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) UITextView_Message.attributedText = theAttributedString 

对于Swift3

  let theString = "<h1>H1 title</h1><b>Logo</b><img src='http://www.aver.com/Images/Shared/logo-color.png'><br>~end~" let theAttributedString = try! NSAttributedString(data: theString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) UITextView_Message.attributedText = theAttributedString 

你也可以使用更多的方法。 Three20库提供了一个方法,我们可以通过它来构造一个样式化的textView。 你可以在这里得到图书馆: http : //github.com/facebook/three20/

类TTStyledTextLabel有一个名为textFromXHTML的方法:我想这会达到目的。 但是在只读模式下是可能的。 我不认为这将允许编写或编辑HTML内容。

还有一个问题可以帮助你: UILabel和TextView的HTMLstring内容

我希望它有帮助。

NSDoc将string中的文本文件保存到一个html文件中,然后同时将其加载到与您的UITextView位于相同位置的webview中。