ios - 在 TableView 上滚动时,tableViewCell 中的按钮图像正在更改
问题描述
在 tableView 中滚动时出现问题。我在项目中实现了书签,一切正常,除了滚动时。当它第一次运行时,它会调用 API 来检查该项目是否已添加书签。如果加了书签,则显示它显示填充的图像,如果没有,则显示未填充的图像。第一次加载时它工作正常,但是当我滚动书签按钮图像时会发生变化。
我尝试在 CustomTableViewCell 上使用 prepareForReuse 来解决这个问题,并且只在 cellforRow 上渲染按钮图像,但没有奏效。
这是主视图控制器:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let itemCell = tableView.dequeueReusableCell(withIdentifier: "NewPodcastTableViewCell", for: indexPath) as! NewPodcastTableViewCell
let allMaterial = materials[indexPath.row]
itemCell.setMaterials(materials: allMaterial)
itemCell.delegate = self
return itemCell
}
extension BrowseViewController: ViewBookmarkedDelegate {
func setBookmark( refId: String, isBookmarking: Bool, refType: String, refSubType: String) {
let query = SetBookmarkMutation(refId: refId, refType: "material", isBookmarking: true, refSubType: refSubType)
Apollo.shared.client.perform(mutation: query ) { results, error in
if var bookmarked = results?.data?.bookmark {
print(refId,bookmarked,"onUnbookmark")
} else if let error = error {
print("Error loading data \(error)")
}
}
}
func setUnbookmark(refId: String, isBookmarking: Bool, refType: String, refSubType: String) {
let query = SetBookmarkMutation(refId: refId, refType: "material", isBookmarking: false, refSubType: refSubType)
Apollo.shared.client.perform(mutation: query ) { results, error in
if var bookmarked = results?.data?.bookmark {
print(refId,bookmarked,"onUnbookmark")
} else if let error = error {
print("Error loading data \(error)")
}
}
}
}
这是 CustomTableViewCell
protocol ViewBookmarkedDelegate {
func setBookmark( refId: String, isBookmarking: Bool, refType: String, refSubType: String)
func setUnbookmark( refId: String, isBookmarking: Bool, refType: String, refSubType: String)
}
var delegate: ViewBookmarkedDelegate?
@IBOutlet weak var bookmarkButton: UIButton!
@IBAction func bookmarkButtonTapped(_ sender: UIButton) {
if (self.materials?.fragments.materialFields.bookmark?.bookmarked == false){
self.bookmarkButton.setImage(#imageLiteral(resourceName: "bookmarkEmpty"), for: .normal)
} else if (self.materials?.fragments.materialFields.bookmark?.bookmarked == true) {
self.bookmarkButton.setImage(#imageLiteral(resourceName: "Bookmark Filled"), for: .normal)
}
func setMaterials(materials: GetMaterialsByTypeQuery.Data.AllMaterial) {
self.materials = materials
}
override func prepareForReuse() {
super.prepareForReuse()
self.bookmarkButton.setImage(nil, for: .normal)
}
关于如何解决这个问题的任何想法?
先感谢您。
解决方案
当您重复使用单元格时,就会发生这种情况。只需在设置材料时在单元格中设置书签相关数据并基于此设置图像。它会工作得很好。
推荐阅读
- html - 具有突破布局的 CSS 网格。如何为不同页面上的内容设置不同的大小?
- typescript - 在联合类型中迭代子对象 - 打字稿
- python - 在 python 中从数据框(或电子表格)分配变量
- laravel - Laravel with() 一起使用表或变量名
- python - Python Selenium - 从动态页面中抓取表格
- python - 如何更改矩阵行中的最大和最小元素?
- mysql - 如何连接两个表,然后使用新的主键插入第三个表?
- javascript - 调用 await browser.close() 时出错:(节点:4960)UnhandledPromiseRejectionWarning:page.goto:导航失败,因为页面已关闭
- oracle - 日期/时间功能
- javascript - .wav 文件的异步获取和解码适用于桌面,但不适用于移动设备(WebAudioAPI)