2016-12-30 129 views
0

我的表格視圖重用了以前的細胞圖像數據並顯示了以前細胞的圖像。我做了以下事情以防止重複使用。我錯過了什麼?如何阻止UITableView重複使用圖像單元格數據?

@IBAction func cityBtn(_ sender: UIButton) { 
    for i in stride(from: 0, to: assignCities.count, by: 1) 
     { cityName.append(bigCities[i]) 
     cityImages.append(bigCityImages[i]) 
     }} 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let myCell= tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CityCell 
    myCell.myLabel.text = cityName[indexPath.row] 

    let cityImg = cityImages[indexPath.row] 
    myCell.myImage.image = nil 

    if (cityImg != "") 
    { 
     myCell.myImage.image = UIImage(named:cityImg) 
    } 
    else 
    { 
     myCell.myImage.image = nil 
    } 
    return myCell 
} 


import UIKit 
class CityCell: UITableViewCell { 
    @IBOutlet weak var myImage: UIImageView! 
    @IBOutlet weak var myLabel: UILabel! 

override func prepareForReuse() { 
    super.prepareForReuse() 
    myImage.image = nil 
} 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 
} 

我做以上,但仍是沒有得到結果

+0

是OK的行爲,要重複使用電池,因此它保持它的狀態,你需要重置它 –

+0

我可以知道,如何重置它,因爲我所有的嘗試都是徒勞的。 – leaner122

+0

你的代碼看起來不錯。你能打印你陣列的內容嗎?顯示您的numberOfRows方法以及您如何製作陣列。 – Saad

回答

5

您可以實現的UITableViewCellfunc prepareForReuse()方法有重置您的屬性。

該方法被調用的對象從UITableView的方法dequeueReusableCell(withIdentifier :)

func prepareForReuse() { 
    super. prepareForReuse() 
    myImage.image = nil 
} 

這不得不您的自定義表格視圖單元格類中實現返回之前。

+0

您是否介意指導我使用它的一個示例,因爲我只能找到關於該函數的一行答案。 – leaner122

+0

把方法放到你的'CityCell'類 – Tj3n

+0

我按照上面的方法做了,但結果仍然一樣。 – leaner122

0

如果ARA沒有這麼多的細胞在你的tableView,也許你可以使用獨特的CellIdentifier,如:indexPath.section_indexPath.row