带有两个自定义单元格的 TableView 导致单元格重用问题(Swift 4)
Posted
技术标签:
【中文标题】带有两个自定义单元格的 TableView 导致单元格重用问题(Swift 4)【英文标题】:TableView with two custom cells causing cell re-use issue (Swift 4) 【发布时间】:2018-04-03 21:18:55 【问题描述】:我在两个自定义单元格类型之间的 tableView 中显示单元格。第 1 节有几个单元格,第 2 节有一个。
Section-1 单元格有一个标签和一张照片。照片是用 Alamofire 下载的。
Section-2 单元格有一个标签和一张带彩色背景的空白照片。
当 Section-1 中的顶部单元格滚动并出列时,Section-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
【问题讨论】:
【参考方案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
【讨论】:
就是这样!非常感谢。我真的很感激。以上是关于带有两个自定义单元格的 TableView 导致单元格重用问题(Swift 4)的主要内容,如果未能解决你的问题,请参考以下文章
具有两个不同 tableview 单元格的两个 tableview
单击自定义单元格的 UITextField 后重新加载 TableView