所以我有一个tableview,其中包含每个单元格中的项目列表。这些单元格中的每一个都包含一个图像视图,在被点击时,它会展开单元格并显示该项目的图像。当我向下滚动表格视图并向上滚动到所选的单元格时,图像消失了。我知道这是由于重复使用单元格,但我不确定如何在滚动浏览其他项目时保持扩展的单元格图像。
我最接近的是: my table view reuse the selected cells when scroll -- in SWIFT
如果有人能借给我一手会很棒的话。谢谢!
编辑:添加代码段 - 抱歉等待。
fileprivate var expandedRowIndex: Int?
// cellForRowAt
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
// CatalogItem row.
let item = self.items[indexPath.row]
let expanded = indexPath.row == self.expandedItemRowIndex
// Return standard catalog item cell.
let reuseID = expanded
? CatalogItemCell.PROTOCELL_EXPANDED.id
: CatalogItemCell.PROTOCELL.id
let cell = tableView.dequeueReusableCell(withIdentifier: reuseID) as! CatalogItemCell
// Reset thumbnail image back to nil. Needed so that images appear
// only in the cell that they belong in.
if indexPath.row == self.expandedRowIndex{
cell.uiImage_Thumbnail.image = nil
}
return cell
}
// didSelectRowAt
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
// Expand row - Get the current cell and show image
self.expandedItemRowIndex = indexPath.row
let item = self.items[indexPath.row]
let currentCell = tableView.cellForRow(at: indexPath)
// Pass both the selected cell and item to the ImageManager
ImageManager.startImageRequest(currentCell: currentCell!, item: item)
if self.expandedRowIndex == indexPath.row
{
// Selected row is already expanded.
return
}
var reloadPaths = [IndexPath]()
// Collapse previously expanded row.
if let previousRowIndex = self.expandedRowIndex
{
reloadPaths.append(IndexPath(row: previousRowIndex, section: 0))
}
// Expand the selected row.
self.expandedRowIndex = indexPath.row
let item = self.items[indexPath.row]
debugPrint(item.description)
reloadPaths.append(IndexPath(row: indexPath.row, section: 0))
tableView.reloadRows(at: reloadPaths as [IndexPath], with: .fade)
}
答案 0 :(得分:3)
您可以维护selectedIndex变量。 在您的cellForRow中,您可以检查此调用是否适用于selectedCell。如果是,则执行所选单元格所需的自定义。
此外,您可能还想处理heightForRow,还会检查该调用是否适用于所选单元格。
您可以维护所选单元格的indexPath。如果有多个部分。 无需阻止它重复使用。
希望有所帮助。