Как показать HTML-текст из API на iPhone? - PullRequest
46 голосов
/ 09 ноября 2010

Лучший пример для объяснения моей ситуации - использовать пост в блоге. Допустим, у меня есть UITableView, загруженный заголовками сообщений блога, которые я получил от API. Когда я нажимаю на строку, я хочу показать подробный пост в блоге.

При этом API возвращает несколько полей, включая «тело сообщения» (которое является HTML-текстом). У меня вопрос, что я должен использовать для отображения, чтобы он отображался в формате HTML? Должен ли я использовать UIWebView для этого? Я не уверен, используете ли вы UIWebView, когда вы буквально просматриваете веб-страницу (например, инициализируете ее с помощью URL или чего-то еще), или вы можете передать ей строку HTML, и она отформатирует ее должным образом.

Есть несколько других полей, которые будут отображаться на этой странице, таких как заголовок, категория, автор и т. Д. Я просто использую UILabels для них, так что никаких проблем нет. Но я не знаю, что делать с фрагментом HTML. Я делаю все это программно, кстати.

Если вы не можете сказать, я относительно новичок в разработке под iOS, всего около 2-3 недель, без ОБЪЯВЛЕНИЯ. Так что, если UIWebView является правильным подходом, я также был бы признателен за любую ошибку! примечания, если таковые имеются.

Ответы [ 8 ]

54 голосов
/ 10 ноября 2010

Как сказал Дэвид Лю, UIWebview - это путь.Я бы порекомендовал несколько собрать строку HTML отдельно, а затем передать ее в UIWebView.Кроме того, я бы сделал фон прозрачным, используя [webView setBackgroundColor:[UIColor clearColor]], чтобы вам было удобнее выглядеть так, как следует.

Вот пример кода:

- (void) createWebViewWithHTML{
    //create the string
    NSMutableString *html = [NSMutableString stringWithString: @"<html><head><title></title></head><body style=\"background:transparent;\">"];

    //continue building the string
    [html appendString:@"body content here"];
    [html appendString:@"</body></html>"];

    //instantiate the web view
    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.frame];

    //make the background transparent
    [webView setBackgroundColor:[UIColor clearColor]];

    //pass the string to the webview
    [webView loadHTMLString:[html description] baseURL:nil];

    //add it to the subview
    [self.view addSubview:webView];

}

ПРИМЕЧАНИЕ:

Преимущество использования NSMutableString заключается в том, что вы можете продолжить построение строки через всю операцию синтаксического анализа и затем передать ее в UIWebView, тогда как NSStringне может быть изменено после его создания.

9 голосов
/ 09 апреля 2014
   self.textLbl.attributedText = [[NSAttributedString alloc] initWithData:    [@"html-string" dataUsingEncoding:NSUnicodeStringEncoding]
                                                                          options:@{     NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
                                                                                     } documentAttributes:nil error:nil];
7 голосов
/ 10 ноября 2010
NSString *strForWebView = [NSString stringWithFormat:@"<html> \n"
      "<head> \n"
      "<style type=\"text/css\"> \n"
      "body {font-family: \"%@\"; font-size: %@; height: auto; }\n"
      "</style> \n"
      "</head> \n"
      "<body>%@</body> \n"
      "</html>", @"helvetica", [NSNumber numberWithInt:12], ParameterWhereYouStoreTextFromAPI];


 [self.webview loadHTMLString:strForWebView baseURL:nil];

Я использую этот код, чтобы даже установить шрифт для текста веб-просмотра и передаю свой ivar 'ParameterWhereYouStoreTextFromAPI', где я храню текст, полученный из API.

6 голосов
/ 14 сентября 2012

В особом случае примитивного HTML (стили текста, теги p / br) вы также можете использовать UITextView со недокументированным свойством:

-[UITextView setValue:@"<b>bold</b>" forKey:@"contentToHTMLString"]

Несмотря на то, что он недокументирован, он используется во многих известных мне приложениях и до сих пор не вызвал ни одного отказа.

4 голосов
/ 09 ноября 2010

Вы можете использовать UIWebView - loadHTMLString: baseURL: метод.

Ссылочная ссылка: здесь

2 голосов
/ 10 сентября 2012

Ответ Моше великолепен, но если вам нужен прозрачный веб-просмотр, вам нужно установить для свойства opaque значение FALSE.

Вы можете проверить: Как сделать прозрачный UIWebVIew

0 голосов
/ 28 ноября 2016

Мой сценарий: у меня есть Textview в контроллере представления, и я должен показать данные в textView в формате HTML.

Swift 3:

func detectUrlInText() {

let attrStr = try! NSAttributedString(
            data: "<b><i>\(Ldesc)</i></b>".data(using: String.Encoding.unicode, allowLossyConversion: true)!,
            options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil)

 desc.attributedText = attrStr

 desc.font = UIFont(name: "CALIBRI", size: 14)

}
// Ldesc is the string which gives me the data to put in the textview. desc is my UITextView.
:)
0 голосов
/ 01 февраля 2016

Вы можете показать его, удалив текст HTML / JS, например (align, center, br>). Используйте этот метод, если вы ориентируетесь на iOS7.0 и выше.

    NSString *htmlFile;

    htmlFile=[array valueForKey:@"results"];

    NSAttributedString *attr = [[NSAttributedString alloc] initWithData:[htmlFile dataUsingEncoding:NSUTF8StringEncoding]options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:@(NSUTF8StringEncoding)}documentAttributes:nil error:nil];
        NSLog(@"html: %@", htmlFile);
        NSLog(@"attr: %@", attr);
        NSLog(@"string: %@", [attr string]);
        NSString *finalString = [attr string];

        [webView loadHTMLString:[finalString description] baseURL:nil];
...