如何在UITextView或UILabel中显示html数据,有一些方法可行,但需要花费大量时间加载和滚动时
cell.textView.attributedText = NSAttributedString(
data: comments.commentBody.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil,
error: nil)
答案 0 :(得分:2)
如果问题只是缓慢加载,请尝试在侧线程中使用dispatch_async异步执行网络请求,然后更新主线程中的UI(必需!)
let commentsQueue:dispatch_queue_t = dispatch_queue_create("comments queue", nil)
dispatch_async(commentsQueue, {
let commentsRequested = NSAttributedString(
data: comments.commentBody.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil,
error: nil)
dispatch_async(dispatch_get_main_queue(), {
cell.textView.attributedText = commentsRequested
})
})
答案 1 :(得分:1)
这可能是Apple的NSAttributedString
API HTML问题,您可以尝试NSAttributedString+HTML
。
答案 2 :(得分:-1)
从后台队列调度块到主队列是为了表示某些后台处理已完成:
dispatch_queue_t backgroundQueue = dispatch_queue_create("YourQueueName", 0);
dispatch_async(backgroundQueue, ^{
;
//Do background `enter code here`process like forming attributed string from API parameter..
dispatch_async(dispatch_get_main_queue(), ^{
//Update UI for textview ...
});
});
在这种情况下,我们在后台队列上进行了长时间的计算,并且在计算完成时需要更新我们的UI。通常必须从主队列更新UI,以便我们发信号通知'使用第二个嵌套dispatch_async
返回主队列。