Подтвердить что ты не робот

Как показать HTML-текст из API на iPhone?

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

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

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

Если вы не можете сказать, я относительно новичок в разработке iOS, всего около 2-3 недель, с NO obj-c фоном. Поэтому, если UIWebView является правильным подходом, я также буду признателен за любые "полученные"! примечания, если они есть.

4b9b3361

Ответ 1

Как сказал Дэвид Лю, 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" не может быть изменен после его создания.

Ответ 2

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];

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

Ответ 3

   self.textLbl.attributedText = [[NSAttributedString alloc] initWithData:    [@"html-string" dataUsingEncoding:NSUnicodeStringEncoding]
                                                                          options:@{     NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
                                                                                     } documentAttributes:nil error:nil];

Ответ 4

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

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

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

Ответ 5

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

Ссылка ссылки: здесь

Ответ 6

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

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

Ответ 7

Вы можете показать это, удалив текст 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];

Ответ 8

Мой сценарий: у меня есть 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.
:)