Как я могу отображать HTML-текст в текстовом режиме?
Например,
string <h1>Krupal testing <span style="font-weight:
bold;">Customer WYWO</span></h1>
Предположим, что текст выделен полужирным шрифтом, поэтому он отображается в текстовом виде как полужирная строка, но я хочу отображать обычный текст. Возможно ли это в iPhone SDK?
ios
iphone
uitextview
Миланджансари
источник
источник
Используйте следующий блок кода для 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;
источник
NSAttributedString
наNSMutableAttributedString
и добавьте[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)];
Для Swift 4 , Swift 4.2 и Swift 5
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> </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> </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
источник
let path = Bundle.main.path(forResource: "styles", ofType: "css")
получить содержимоеlet content = try! String(contentsOfFile: path!, encoding: String.Encoding.utf8)
и добавить его в строку htmlОтвет 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;
Вы можете увидеть разницу на картинке ниже:
источник
Вы можете взглянуть на классы OHAttributedLabel, я использовал их, чтобы решить эту проблему с моим textField. В этом они переопределили метод drawRect, чтобы получить требуемый стиль.
https://github.com/AliSoftware/OHAttributedLabel
источник
Мой первый ответ был сделан до того, как iOS 7 представила явную поддержку отображения строк с атрибутами в общих элементах управления. Теперь вы можете установить
attributedText
вUITextView
АньNSAttributedString
создан из содержимого HTML с помощью:-(id)initWithData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error
- initWithData: options: documentAttributes: error: (Apple Doc)
Оригинальный ответ, сохраненный для истории:
Если вы не используете a
UIWebView
, ваше решение будет напрямую зависеть отCoreText
. Как указывает ElanthiraiyanS, для упрощения рендеринга форматированного текста возникли некоторые проекты с открытым исходным кодом. Я бы порекомендовалNSAttributedString-Additions-For-HTML( Edit: проект был вытеснен DTCoreText ), в котором есть классы для генерации и отображения строк с атрибутами из HTML.источник
Мне подошел ответ от BHUPI.
Перенос кода на быстрый, как показано ниже:
Обратите внимание на "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
источник
NSUnicodeStringEncoding
правильно, потому что NSString имеет кодировку Unicode, а не UTF8. В случае символа CJK вы не получите правильного ответа.Для 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
источник
Для некоторых случаев UIWebView - хорошее решение. Потому как:
Использование NSAttributedString может привести к сбоям, если html сложный или содержит таблицы ( пример )
Для загрузки текста в веб-представление вы можете использовать следующий фрагмент (просто пример):
func loadHTMLText(_ text: String?, font: UIFont) { let fontSize = font.pointSize * UIScreen.screens[0].scale let html = """ <html><body><span style=\"font-family: \(font.fontName); font-size: \(fontSize)\; color: #112233">\(text ?? "")</span></body></html> """ self.loadHTMLString(html, baseURL: nil) }
источник
Вы также можете использовать еще один способ. Библиотека Three20 предлагает метод, с помощью которого мы можем создать стилизованный textView. Вы можете получить библиотеку здесь: http://github.com/facebook/three20/
Класс TTStyledTextLabel имеет метод под названием textFromXHTML: я думаю, это послужит цели. Но это было бы возможно в режиме только для чтения. Я не думаю, что это позволит писать или редактировать HTML-контент.
В этом вам также может помочь вопрос: содержимое строки HTML для UILabel и TextView
Надеюсь, это поможет.
источник
NSDoc сохраняет текстовый файл в виде строки в html-файл, а затем одновременно загружает его в веб-просмотр, который находится в том же месте, что и ваш UITextView ..
источник