Отображать html-текст в uitextview
Как отобразить текст HTML в текстовом виде?
Например,
string <h1>Krupal testing <span style="font-weight:
bold;">Customer WYWO</span></h1>
Предположим, что текст выделен жирным шрифтом, поэтому он отображается в текстовом виде как жирная строка
но я хочу отображать обычный текст. Возможно ли это в iPhone SDK?
Ответы
Ответ 1
Использовать UIWebView на iOS 5-.
В iOS 6+ вы можете использовать UITextView.attributedString
, см. fooobar.com/questions/90956/... для.
Также существует недокументированный метод -[UITextView setContentToHTMLString:]
. Не используйте это, если вы хотите отправить в AppStore.
Ответ 2
Используйте следующий блок кода для 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;
Ответ 3
Для Swift 4 и Swift 4.2:
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
Ответ 4
Ответ 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;
Вы можете увидеть разницу на картинке ниже:
![enter image description here]()
Ответ 5
Вы можете посмотреть классы OHAttributedLabel, я использовал их для преодоления этой проблемы с помощью textField. При этом они переопределили метод drawRect для получения требуемого стиля.
https://github.com/AliSoftware/OHAttributedLabel
Ответ 6
Мой первый ответ был сделан до того, как в iOS 7 появилась явная поддержка отображения атрибутных строк в общих элементах управления. Теперь вы можете установить attributedText
of UITextView
в NSAttributedString
, созданный из содержимого HTML, используя:
-(id)initWithData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error
- initWithData: options: documentAttributes: ошибка: (Apple Doc)
Оригинальный ответ, сохраненный для истории:
Если вы не используете UIWebView
, ваше решение будет напрямую полагаться на CoreText
. Как отмечает ElanthiraiyanS, некоторые проекты с открытым исходным кодом появились для упрощения обработки расширенного текста. Я бы рекомендовал NSAttributedString-Additions-For-HTML (Изменить: проект был вытеснен DTCoreText), в котором есть классы для генерации и отображения атрибутных строк из HTML.
Ответ 7
Ответ подошел ко мне, что от 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
Ответ 8
Для 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
Ответ 9
В некоторых случаях UIWebView является хорошим решением. Потому что:
- отображает таблицы, изображения, другие файлы
- это быстро (по сравнению с NSAttributedString: NSHTMLTextDocumentType)
- это из коробки
Использование 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)
}
Ответ 10
Вы также можете использовать еще один способ. Библиотека Three20 предлагает метод, с помощью которого мы можем создать текстовый текст. Вы можете получить библиотеку здесь: http://github.com/facebook/three20/
Класс TTStyledTextLabel имеет метод textFromXHTML: я предполагаю, что это послужит цели. Но это было бы возможно в режиме readonly. Я не думаю, что это позволит писать или редактировать HTML-контент.
Существует также вопрос, который может помочь вам в этом: Содержимое HTML-строки для UILabel и TextView
Я надеюсь, что это будет полезно.
Ответ 11
NSDoc сохраняет текстовый файл в строке в html файл, а затем загружает его в веб-представление, которое находится на том же месте, что и ваш UITextView..