как показать html-текст из api на iphone?

<p>лучший пример, чтобы объяснить мою ситуацию - использовать сообщение в блоге. допустим, у меня есть uitableview, загруженный заголовками постов в блоге, которые я получил от api. когда я нажимаю на строку, я хочу показать подробный пост в блоге.</p><p>при этом api возвращает несколько полей, в том числе «тело сообщения» (то есть текст html). у меня вопрос, что я должен использовать для отображения, чтобы он отображался в формате html? должен ли я использовать uiwebview для этого? я не уверен, используете ли вы uiwebview, когда вы буквально просматриваете веб-страницу (например, инициализируете ее с помощью url или чего-то еще), или вы можете передать ей строку html, и она отформатирует ее должным образом.</p><p>есть несколько других полей, которые будут отображаться на этой странице, такие как заголовок, категория, автор и т.д. я просто использую uilabels для них, поэтому никаких проблем нет. но я не знаю, что делать с фрагментом html. я делаю все это программно, кстати.</p><p>если вы не можете сказать, я относительно новичок в разработке под ios, всего около 2-3 недель, без объявления. так что, если uiwebview является правильным подходом, я также был бы признателен за любую ошибку! заметки, если таковые имеются.</p>

<p>как сказал дэвид лю, <a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/uiwebview\_class/reference/reference.html%23//apple\_ref/occ/instm/uiwebview/loadhtmlstring:baseurl">uiwebview</a> это путь. я бы порекомендовал несколько собрать строку html отдельно, а затем передать ее в uiwebview. кроме того, я бы сделал фон прозрачным, используя <code>[webview setbackgroundcolor:[uicolor clearcolor]]</code>, чтобы вам было проще сделать все как надо.</p><p>вот пример кода:</p><pre><code>- (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]; } </code></pre><p><strong>нота:</strong></p><p>преимущество использования nsmutablestring заключается в том, что вы можете продолжать строить свою строку с помощью всей операции синтаксического анализа и затем передавать ее в uiwebview, тогда как nsstring не может быть изменена после ее создания.</p>

<pre><code> self.textlbl.attributedtext = [[nsattributedstring alloc] initwithdata: [@"html-string" datausingencoding:nsunicodestringencoding] options:@{ nsdocumenttypedocumentattribute: nshtmltextdocumenttype } documentattributes:nil error:nil]; </code></pre>

<pre><code>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]; </code></pre><p>я использую этот код, чтобы даже установить шрифт для текста веб-просмотра и передаю свой ivar 'parameterwhereyoustoretextfromapi', где я храню текст, полученный из api.</p>

<p>в особом случае примитивного html (текстовые стили, теги p/br) вы также можете использовать <code>uitextview</code> с недокументированным свойством:</p><pre><code>-[uitextview setvalue:@"<b>bold</b>" forkey:@"contenttohtmlstring"] </code></pre><p>несмотря на то, что он недокументирован, он используется во многих известных мне приложениях и до сих пор не вызвал ни одного отказа.</p>

<p>вы можете использовать uiwebview - loadhtmlstring: baseurl: метод.</p><p>ссылка: <a href="http://developer.apple.com/library/ios/documentation/uikit/reference/uiwebview\_class/reference/reference.html#//apple\_ref/occ/instm/uiwebview/loadhtmlstring%3abaseurl%3a">здесь</a> </p>

<p>ответ моше отличный, но если вы хотите прозрачного просмотра веб-страниц, вам нужно установить для свойства opaque значение false.</p><p>вы можете проверить: <a href="https://stackoverflow.com/questions/3646930/how-to-make-a-transparent-uiwebview">как сделать прозрачный uiwebview</a> </p>

<p>вы можете показать это, удалив текст html/js, например (align, center, br>). пожалуйста, используйте этот метод, если вы ориентируетесь на ios7.0 и выше.</p><pre><code> 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]; </code></pre>

<p>мой сценарий: у меня есть textview в контроллере представления, и я должен показать данные в textview в формате html.</p><p>свифт 3:</p><pre><code>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. :) </code></pre>