[英]Swift tableview image from URL not showing until cell is selected
我正在遍歷URL數組,以便在表格單元格中顯示圖像。 由於某些原因,只有選中該單元格,圖像才會顯示。 一次只能顯示一張圖像,因此當我選擇一個單元格以顯示圖像時,一旦選擇另一個單元格,它將再次消失。 我不確定是什么問題,因為文本顯示沒有問題:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "resultCell", for: indexPath) as! ResultsTableViewCell
var place = [String]()
var img = [String]()
if imageUrls.count == venueIds.count {
for (key,value) in restaurantInfo {
place.append(value[0])
img.append(value[1])
}
let search = img[indexPath.row]
Alamofire.request(search).responseImage { response in
if let image = response.value {
cell.imageSelection.image = image
}
else{
print(response.result.error!)
}
}
cell.newLabel.text = place[indexPath.row]
}
return cell
}
嘿,理想情況下,您不應從cellForRowAt方法調用Web服務,而應為表准備一個模型並事先獲取數據。
要么
同樣,圖像獲取也可以異步完成,這樣表的滾動不會變得遲鈍並且圖像可以正確顯示。
DispatchQueue.main.async {}
與其嘗試將圖像添加到單元格中,不如將圖像作為cell.backgroundImage
添加到tableView
中。 希望能解決您的問題!
很難說沒有在自定義單元格或didSelectRow
方法中看到任何內容,但我的猜測是這種情況正在發生,因為在Alamofire請求完成之前,將在每個單元格上調用cellForRowAt
。
tableView(_:cellForRowAt:)
經常被調用-每次要將一個單元從隊列中取出並顯示在屏幕上時。 我建議不要像曼西所說的那樣在這里打網絡電話。 您也可能不想在該函數中執行該循環來獲取餐廳信息。 每當該單元將要出隊並出現在屏幕上時,將為每個單元調用循環和服務調用-這將變得非常昂貴。 通過此代碼還可以看到,當表格視圖的某個單元格脫離屏幕然后即將再次出現在屏幕上時,即使先前已經下載了該單元格,它也會嘗試重新下載圖像(因為cellForRow
將再次對該單元格進行調用)。
文本標簽顯示沒有問題,因為它不依賴於任何網絡調用,並且可以立即繪制。 我的猜測是您的didSelectRow
或自定義單元格告訴該單元格在被選中時會重新繪制自身,這就是為什么當您選擇該圖像時會顯示該圖像的原因。
我建議將循環和請求移到該函數之外,並創建某種數據結構來保存這些值。 在等待請求完成時,您可能需要在圖像視圖中實現加載動畫,並且圖像的數據結構可以充當緩存。 有幾種不同的解決方法-這些只是一般性建議。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.