[ios] uitextview에 html 텍스트 표시

텍스트보기에서 HTML 텍스트를 어떻게 표시 할 수 있습니까?

예를 들면

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

텍스트가 굵게 표시되어 textview에 굵은 문자열로 표시되지만 일반 텍스트를 표시하고 싶다고 가정합니다. iPhone SDK에서 가능합니까?



답변

iOS 5에서 UIWebView를 사용합니다.

iOS 6 이상에서는을 사용할 수 있습니다 . 방법 UITextView.attributedStringhttps://stackoverflow.com/a/20996085 를 참조 하세요 .


도 있습니다 문서화되지 않은 -[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;


답변

대한 스위프트 4 , : 스위프트 4.2스위프트 (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

대한 스위프트 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


답변

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이 공통 컨트롤에 속성 문자열을 표시하기위한 명시적인 지원을 도입하기 전에 만들어졌습니다. 당신은 지금 설정할 수 attributedTextUITextViewNSAttributedString사용하여 HTML 내용에서 만든 :

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

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

역사를 위해 보존 된 원래 답변 :

를 사용하지 않는 한 UIWebView솔루션은 CoreText. ElanthiraiyanS가 지적했듯이 리치 텍스트 렌더링을 단순화하기 위해 일부 오픈 소스 프로젝트가 등장했습니다. 내가 추천 할 것입니다 NSAttributedString은-추가를 위해 HTML ( 편집 : 이 프로젝트는 대체 된 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