it-swarm.com.ru

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

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

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

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

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

45
rpheath

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

54
Moshe
   self.textLbl.attributedText = [[NSAttributedString alloc] initWithData:    [@"html-string" dataUsingEncoding:NSUnicodeStringEncoding]
                                                                          options:@{     NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
                                                                                     } documentAttributes:nil error:nil];
9
Pedroinpeace
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.

7
neha

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

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

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

6
Ortwin Gentz

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

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

4
David Liu

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

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

2
kraag22

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

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

Свифт 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
Mili