【问题标题】:swift tableviewcell button image issueswift tableviewcell按钮图像问题
【发布时间】:2015-07-10 08:27:20
【问题描述】:

我的 tableviewcell 中有一个按钮,当满足特定条件时,我想更改按钮图像。我的桌面视图有无尽的滚动。

例如,我在第一页上有 10 个单元格。第一个单元格符合条件并且按钮图标更改正确显示。但是当我滚动 11 时,单元格图标也发生了变化,不符合标准。当我向下滚动时,我观察到第 21、31... 单元格图标也发生了变化。

func setupX(){

  let authorID = self.yazar?["author_id"].int!
  let fetchRequest = NSFetchRequest(entityName: "FavAuthors")
  let sortDescriptor = NSSortDescriptor(key: "authorID", ascending: true)
  fetchRequest.sortDescriptors = [sortDescriptor]
  let predicate = NSPredicate(format: "authorID == %ld", authorID!)
  fetchRequest.predicate = predicate
  let fetchResults = self.context!.executeFetchRequest(fetchRequest, error:  nil) as? [FavAuthors]
  if fetchResults!.count == 0 {
  }else{
     self.followButton.setImage(UIImage(named: "UnFollow Button.pdf"), forState: UIControlState.Normal)
  }
} 

【问题讨论】:

  • 这是因为 tableview 重用了单元格......你必须保持单元格上的按钮状态才能摆脱这个
  • 我不知道代码与所描述的问题有什么关系,但我仍然可以判断出了什么问题:tableViewCells 被重用,如果一个单元格移出屏幕而另一个单元格移动-screen 不会创建一个新的单元格,它会重用以前关闭的单元格。如果您将图像设置在cellForRowAtIndexpath 之外的某个位置,则如果单元格被排成队列以获取新的索引路径,则先前设置的内容仍然存在。
  • 我将它设置在我的自定义 tableviewcell 中

标签: ios swift uitableview


【解决方案1】:

这是因为单元格以旧状态重用。如果图像不符合条件,则应明确设置图像。

例如,改变:

if fetchResults!.count == 0 {
  } else {
     self.followButton.setImage(UIImage(named: "UnFollow Button.pdf"), forState: UIControlState.Normal)
  }

收件人:

if fetchResults!.count == 0 {
     self.followButton.setImage(UIImage(named: "Follow Button.pdf"), forState: UIControlState.Normal)
  } else {
     self.followButton.setImage(UIImage(named: "UnFollow Button.pdf"), forState: UIControlState.Normal)
  }

【讨论】:

    【解决方案2】:

    当您向下滚动视图时,您正在重复使用单元格,因此第一个单元格中设置的图像将被重复使用。如果在 if 语句中将图像设置为 nil,它应该在重用时删除该图像。

    【讨论】:

    • 简单的经验法则:数据必须在模型中。所以按钮状态也应该在数组/dict/coredata/NSUserdfault中。不在用户界面中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多