在swift中显示UITextView或UILabel中的html数据

时间:2015-01-06 09:53:09

标签: ios swift uitextview

如何在UITextView或UILabel中显示html数据,有一些方法可行,但需要花费大量时间加载和滚动时

cell.textView.attributedText = NSAttributedString(
            data: comments.commentBody.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
            options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil,
            error: nil)

3 个答案:

答案 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返回主队列。