2015-01-06 2 views
2

Как для отображения HTML данных в UITextView или UILabel, Существует некоторый метод этой работы, но займет много времени для загрузки и при прокруткеОтображение HTML данных в UITextView или UILabel в быстрой

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

так что проблема в загрузке идет медленно? – rakeshbs

+0

Да, когда прокрутка замедляется – orazz

+0

вы уверены, что это только атрибутная строка, которая вызывает замедление? – rakeshbs

ответ

2

Если проблема только медленная загрузка, попробуйте сделать запрос сети асинхронно с dispatch_async в боковом потоке, а затем обновить пользовательский интерфейс в главном потоке (обязательно!)

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

Диспетчерская в блок основная очередь делаются из фона очереди, чтобы сигнализировать, что некоторая фоновая обработка закончила:

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 ... 
}); 
}); 

в этом случае мы делаем длинный расчет на фоне очереди и необходимо обновить наш пользовательский интерфейс, когда вычисление завершено , Обновление пользовательского интерфейса обычно должно выполняться из основной очереди, поэтому мы «сигнализируем» обратно в основную очередь, используя второй вложенный dispatch_async.

+0

Просьба сообщить подробности, почему это сработает. –

+1

@ TFerrell, спасибо, обновил подробности. Он работал для меня. – Niraj

Смежные вопросы