我在两个自定义单元格类型之间的tableView中显示单元格。第1节有几个单元格,第2节有一个单元格。
第1节细胞有标签和照片。照片是用Alamofire下载的。
第2节细胞有一个标签和一张带有彩色背景的空照片。
当第1节中的顶部单元格滚动并出列时,第2部分单元格从底部出现并正确显示。
但是当我将顶部单元格滚动回视图时,它似乎重新下载了它的图像。如果我有两个自定义单元格,则会发生这种情况。如果我只有第1节单元格并且第一个单元格被滚动,则图像已经存在,并且当它再次进入视图时不会重新下载。
为什么会发生这种情况?这两种细胞类型彼此不同,但仍然看起来细胞“重复使用”。
func numberOfSections(in tableView: UITableView) -> Int {
sections = 0
if condition1 == true {
section1 = sections
}
if condition2 == true {
sections += 1
section2 = sections
}
return sections + 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section1 == section {
return array.count
}
if section2 == section {
return 1
}
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellSection1 = tableView.dequeueReusableCell(withIdentifier: "cellSection1", for: indexPath) as! Section1TableViewCell
let cellSection2 = tableView.dequeueReusableCell(withIdentifier: "cellSection2", for: indexPath) as! Section2TableViewCell
func loadImage(url:URL) {
cellSection1.photo.af_setImage(withURL: url, placeholderImage: UIImage(), completion: { (response) -> Void in
if response.result.error != nil && response.result.value == nil {
cellSection1.officialPhoto.image = UIImage()
cellSection2.photo.backgroundColor = .gray
}
})
}
if section1 == indexPath.section {
let photoUrl = Foundation.URL(string: array[indexPath.row].photoUrl)
cellSection1.name.text = array[indexPath.row].name
if photoUrl != nil {
loadImage(url:photoUrl)
}
return cellSection1
}
if section2 == indexPath.section {
cellSection2.name.text = array[indexPath.row].name
cellSection2.photo.image = UIImage()
cellSection2.photo.backgroundColor = .blue
return cellSection2
}
return cellSection1
}
答案 0 :(得分:1)
您可以使用2个部分假设更新到此
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return array.count
}
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if(indexPath.section == 0){
let cellSection1 = tableView.dequeueReusableCell(withIdentifier: "cellSection1", for: indexPath) as! Section1TableViewCell
// configure cell
return cellSection1
}
else
{
let cellSection2 = tableView.dequeueReusableCell(withIdentifier: "cellSection2", for: indexPath) as! Section2TableViewCell
// configure cell
return cellSection2
}