gpt4 book ai didi

ios - 为什么我的 Tableview 重复使用了一些单元格?

转载 作者:行者123 更新时间:2023-11-28 12:39:34 25 4
gpt4 key购买 nike

我有一个 Todo 列表,我在同一个单元格中有一个标签和一个按钮,当我单击按钮时,更改该单元格的图像按钮,但是当我滚动表格 View 时,相同的按钮出现在其他单元格上,它不会出现在未按下按钮的单元格中。

这是我的 cellForRowAtIndexPath 代码

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! TaskTableViewCell


cell.label.text = "Task Number: \(indexPath.row + 1)"
cell.btnFavorite.setImage(UIImage(named: "star"), forState: .Normal)
cell.btnFavorite.setImage(UIImage(named: "star-filled"), forState: .Selected)
cell.btnFavorite.addTarget(self, action: #selector(ListOfTasksViewController.addRemoveFavoriteList), forControlEvents: .TouchUpInside)


return cell
}

func addRemoveFavoriteList(sender : UIButton) {
sender.selected = !sender.selected

}

自定义 TableViewCell 类:

 import UIKit

class TaskTableViewCell: UITableViewCell {

@IBOutlet weak var label: UILabel!
@IBOutlet weak var btnFavorite: FavoriteButton!

override func awakeFromNib() {
super.awakeFromNib()

}

override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

}

override func prepareForReuse() {
super.prepareForReuse()
label.text = nil
btnFavorite.selected = false

}

}

View Controller :

import UIKit

class ListOfTasksViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

tableView.delegate = self
tableView.dataSource = self

}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! TaskTableViewCell


cell.label.text = "Task Number: \(indexPath.row + 1)"

cell.btnFavorite.indexPath = indexPath.row

cell.btnFavorite.addTarget(self, action: #selector(ListOfTasksViewController.addRemoveFavoriteList), forControlEvents: .TouchUpInside)


return cell
}

func addRemoveFavoriteList(sender : FavoriteButton) {

if sender.selected {
sender.selected = false


} else {
sender.selected = true

let index = NSIndexPath(forRow: sender.indexPath, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(index) as! TaskTableViewCell


}

}




}

最佳答案

表格 View 中的单元格被重复使用,因此当您向下滚动时,离开屏幕的单元格被放在队列的开头,然后以不同的 indexPath 返回屏幕。这可能会导致一些问题,因此您需要覆盖自定义单元格类中的 prepareForReuse 方法。

override func prepareForReuse() {

super.prepareForReuse()

label.text = nil
btnFavorite.selected = false
}

关于ios - 为什么我的 Tableview 重复使用了一些单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com