2015-06-05 50 views
1

這是我創造我的細胞:如何刷新UITableViewCell中的UIImage?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("FbFriendCell") as! FbFriendCell 
     cell.initialize() 
     return cell 
} 

很簡單。

在initialize()函數,我下載的圖像,我把它放在一個的UIImageView:

let theImageView = UIImageView(image: userPhoto) 
theImageView.frame = CGRect(x: 0, y: 0, width: 80, height: 80) 
self.addSubview(theImageView) 
theImageView.image = userPhoto 
println("The image has been set !") 

的問題是,像只此日誌消息後會出現幾秒鐘:

println("The image has been set !") 

如何強制圖像重新加載?

*閱讀本文* =>該問題可能與圖像位於UITableViewCell內部有很大關係!

+0

後您使用下載圖像的代碼。聽起來像這需要在完成塊中處理。 –

+0

它在完成塊中處理。 – Cherif

回答

5

確保你在主隊列更新圖像

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      //Update UI 
}) 

我以前有這個問題,這解決了我的problem.Just嘗試

2

我想你下載你的形象是異步的。當程序到達println(「圖像已設置!」)行時,您的日誌顯示,但實際上您的圖像尚未下載。您應該將日誌移至下載回調的末尾,然後記錄應該會在圖像出現時及時出現。

或者這可能發生,因爲你沒有更新UI線程你的UIImageView。你可以這樣做:

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     //Set image to UIImageView 
}) 
+0

幾秒後顯示圖像。如果我是同步設置,它根本不會出現。 – Cherif

0

有一種更好的方式來訪問Swift3中的UI線程。

DispatchQueue.main.async() { 

} 

有人說這是比dispatch_async慢,但我從來沒有見過在實際使用中有什麼區別。