在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方法来获得所需的样式。
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中。