Swift : 레이블 또는 textView에 HTML 데이터 표시
제목, 단락, 이미지 및 목록 태그가 포함 된 HTML 데이터가 있습니다.
이 데이터를 하나 UITextView
또는 하나에 표시하는 방법이 UILabel
있습니까?
Swift 4 :
extension String {
var htmlToAttributedString: NSAttributedString? {
guard let data = data(using: .utf8) else { return NSAttributedString() }
do {
return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil)
} catch {
return NSAttributedString()
}
}
var htmlToString: String {
return htmlToAttributedString?.string ?? ""
}
}
그런 다음 UITextView에 HTML 텍스트를 넣고 싶을 때마다 다음을 사용하십시오.
textView.attributedText = htmlText.htmlToAttributedString
다음은 Swift 3 버전입니다.
private func getHtmlLabel(text: String) -> UILabel {
let label = UILabel()
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
label.attributedString = stringFromHtml(string: text)
return label
}
private func stringFromHtml(string: String) -> NSAttributedString? {
do {
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
if let d = data {
let str = try NSAttributedString(data: d,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
return str
}
} catch {
}
return nil
}
여기에서 다른 답변 중 일부에서 문제를 발견했으며이 문제를 해결하는 데 약간의 시간이 걸렸습니다. HTML이 여러 줄에 걸쳐있을 때 레이블 크기가 적절하도록 줄 바꿈 모드와 줄 수를 설정했습니다.
이 확장을 추가하여 html 코드를 일반 문자열로 변환하십시오.
extension String {
var html2AttributedString: NSAttributedString? {
guard
let data = dataUsingEncoding(NSUTF8StringEncoding)
else { return nil }
do {
return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:NSUTF8StringEncoding], documentAttributes: nil)
} catch let error as NSError {
print(error.localizedDescription)
return nil
}
}
var html2String: String {
return html2AttributedString?.string ?? ""
}
}
그런 다음 UITextView 또는 UILabel 안에 문자열을 표시합니다.
textView.text = yourString.html2String
또는
label.text = yourString.html2String
스위프트 3.0
var attrStr = try! NSAttributedString(
data: "<b><i>text</i></b>".data(using: String.Encoding.unicode, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
label.attributedText = attrStr
그 후 텍스트 속성을 변경하는 데 문제가 있었고 다른 사람들이 이유를 묻는 것을 볼 수있었습니다 ...
따라서 가장 좋은 대답은 대신 NSMutableAttributedString과 함께 확장을 사용하는 것입니다.
extension String {
var htmlToAttributedString: NSMutableAttributedString? {
guard let data = data(using: .utf8) else { return nil }
do {
return try NSMutableAttributedString(data: data,
options: [.documentType: NSMutableAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil)
} catch let error as NSError {
print(error.localizedDescription)
return nil
}
}
}
그런 다음 다음과 같이 사용할 수 있습니다.
if let labelTextFormatted = text.htmlToAttributedString {
let textAttributes = [
NSAttributedStringKey.foregroundColor: UIColor.white,
NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 13)
] as [NSAttributedStringKey: Any]
labelTextFormatted.addAttributes(textAttributes, range: NSRange(location: 0, length: labelTextFormatted.length))
self.contentText.attributedText = labelTextFormatted
}
나는 이것을 사용하고있다 :
extension UILabel {
func setHTML(html: String) {
do {
let attributedString: NSAttributedString = try NSAttributedString(data: html.data(using: .utf8)!, options: [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType], documentAttributes: nil)
self.attributedText = attributedString
} catch {
self.text = html
}
}
}
스위프트 3
extension String {
var html2AttributedString: NSAttributedString? {
guard
let data = data(using: String.Encoding.utf8)
else { return nil }
do {
return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:String.Encoding.utf8], documentAttributes: nil)
} catch let error as NSError {
print(error.localizedDescription)
return nil
}
}
var html2String: String {
return html2AttributedString?.string ?? ""
}
}
이 시도:
let label : UILable! = String.stringFromHTML("html String")
func stringFromHTML( string: String?) -> String
{
do{
let str = try NSAttributedString(data:string!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true
)!, options:[NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSNumber(unsignedLong: NSUTF8StringEncoding)], documentAttributes: nil)
return str.string
} catch
{
print("html error\n",error)
}
return ""
}
도움이 되었기를 바랍니다.
이미지와 목록이있는 HTML을 원하면 UILabel에서 지원하지 않습니다. 그러나 YYText 가 트릭을 수행한다는 것을 알았습니다 .
UITextView
또는 UILabel
에서는 이미지 및 텍스트 단락을 표시 할 수 없으므로 UIWebView
.
스토리 보드에 항목을 추가하고 코드에 연결 한 다음 호출하여 URL을로드하면됩니다.
OBJ-C
NSString *fullURL = @"http://conecode.com";
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[_viewWeb loadRequest:requestObj];
빠른
let url = NSURL (string: "http://www.sourcefreeze.com");
let requestObj = NSURLRequest(URL: url!);
viewWeb.loadRequest(requestObj);
단계별 튜토리얼. http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/
위의 답변에 대한 Thx는 Swift 4.2입니다.
extension String {
var htmlToAttributedString: NSAttributedString? {
guard
let data = self.data(using: .utf8)
else { return nil }
do {
return try NSAttributedString(data: data, options: [
NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html,
NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue
], documentAttributes: nil)
} catch let error as NSError {
print(error.localizedDescription)
return nil
}
}
var htmlToString: String {
return htmlToAttributedString?.string ?? ""
}
}
내부에 HTML 코드가있는 문자열이있는 경우 다음을 사용할 수 있습니다.
extension String {
var utfData: Data? {
return self.data(using: .utf8)
}
var htmlAttributedString: NSAttributedString? {
guard let data = self.utfData else {
return nil
}
do {
return try NSAttributedString(data: data,
options: [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
], documentAttributes: nil)
} catch {
print(error.localizedDescription)
return nil
}
}
var htmlString: String {
return htmlAttributedString?.string ?? self
}
}
그리고 귀하가 사용하는 코드 :
label.text = "something".htmlString
참조 URL : https://stackoverflow.com/questions/37048759/swift-display-html-data-in-a-label-or-textview
'development' 카테고리의 다른 글
특정 순서로 PHPUnit 테스트 실행 (0) | 2020.12.31 |
---|---|
내부에 2 색 입자가있는 수정 구슬을 그리는 방법 (0) | 2020.12.31 |
하나의 IPython 노트북 셀에 여러 이미지를 표시 하시겠습니까? (0) | 2020.12.31 |
명령 줄에서 JSON 파일을 어떻게 예쁘게 인쇄 할 수 있습니까? (0) | 2020.12.31 |
Swift UIView 배경색 불투명도 (0) | 2020.12.31 |