Swift 3 自定义单元格在滚动时更改
Posted
技术标签:
【中文标题】Swift 3 自定义单元格在滚动时更改【英文标题】:Swift 3 Custom Cell Changing on scroll 【发布时间】:2016-09-29 09:41:32 【问题描述】:抱歉,我知道这是一个重复的问题,但我无法理解其他问题的答案。
我的自定义单元格在滚动时发生变化。我知道这是由于重用标识符,但我不知道如何修复它。任何帮助,将不胜感激。我也在使用 indexPath.row 来访问一个数组。
如何让我的表格视图在滚动时不更改值,即使我使用了重用标识符?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell : TeamCell = tableView.dequeueReusableCell(withIdentifier: "TeamCell", for: indexPath) as! TeamCell
cell.trainer.image = UIImage(named: "t\(Player.User.Gold.trainers[(indexPath as NSIndexPath).row].imageID)")
if Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p1.name != 0
cell.pokemon1.image = UIImage(named: "\(Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p1.name)")
cell.pokemon1.isHidden = false
else
cell.pokemon1.isHidden = true
if Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p2.name != 0
cell.pokemon2.image = UIImage(named: "\(Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p2.name)")
cell.pokemon1.isHidden = false
else
cell.pokemon2.isHidden = true
if Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p3.name != 0
cell.pokemon3.image = UIImage(named: "\(Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p3.name)")
cell.pokemon1.isHidden = false
else
cell.pokemon3.isHidden = true
if Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p4.name != 0
cell.pokemon4.image = UIImage(named: "\(Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p4.name)")
cell.pokemon1.isHidden = false
else
cell.pokemon4.isHidden = true
if Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p5.name != 0
cell.pokemon5.image = UIImage(named: "\(Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p5.name)")
cell.pokemon1.isHidden = false
else
cell.pokemon5.isHidden = true
if Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p6.name != 0
cell.pokemon6.image = UIImage(named: "\(Player.User.Gold.trainers[(indexPath as NSIndexPath).row].p6.name)")
cell.pokemon1.isHidden = false
else
cell.pokemon6.isHidden = true
return cell
(该函数只检查数组的值是否为0,如果不是则显示图像)
【问题讨论】:
为什么要在每个 if 中设置 pok1 为 hidden= flase?不应该是你设置图像的口袋妖怪吗? 我犯了一个新手错误,没有更改 if 语句中的正确值!哎呀 是的,修复了它!我脸红了,谢谢啊哈 太棒了,玩得开心编码...哦,还有一个建议,读取一次培训师数据并将其放入变量中,因此您可以仅在最佳条件下使用此变量,而无需每次都获取再来一次 【参考方案1】:就像 cmets 所说的那样,问题在于 pokemon1 在每个 if 中的明显设置错误。
编辑
好吧,因为投反对票,我会更准确: 在每个 if 条件下,您都将 pokemon1 设置为可见。您需要使用您设置为图像的 Pokomen。
玩得开心编码
【讨论】:
【参考方案2】:将你的每个口袋妖怪images
设置为nil
或一些常见的placeholder image
紧跟在dequeue
单元格之后,然后放置你的每个if-conditions
并设置每个图像视图的默认隐藏属性,就像你的图像视图是默认隐藏然后将其隐藏属性设置为true
,然后再将图像设置为if
条件!
【讨论】:
好吧,这只是一个与他不同的实现。我认为问题是在每个 if 上设置可见的错误口袋妖怪 Tableview 重用单元格,因此如果对于特定单元格,如果没有可用的图像,那么它会显示已为前一个单元格设置的旧图像!所以让它为零,每次都会使 imageview 的图像为零,如果没有可用于单元格的图像,那么它将保持为零或一些占位符图像! 但他将其设置为 hidden = false以上是关于Swift 3 自定义单元格在滚动时更改的主要内容,如果未能解决你的问题,请参考以下文章
tableView 单元格内的多个 collectionView 单元格在滚动时更改设计