如何解决在这种情况下,如何使用自定义 tableView 单元格处理可重用单元格在代码中从其他位置更改单元格背景颜色不起作用
我正在尝试根据我的情况处理出队可重用单元。我不确定我在这里是否以最好的方式做事,我能够处理关于为自定义单元格中的文本标签将单元格出列的奇怪事情。我在单元格 xib 代码中使用 override func prepareForReuse()
处理了这个问题。但是,当我尝试以相同的方式处理单元格背景时,它无法正常工作。我相信这是因为我正在更改 tableView 函数以外的其他地方的单元格背景...
所以问题是单元格背景没有像预期的那样改变,典型的出列可重用单元格问题。如果我将 backgroundColor = nil
放在 prepareForReuse() 中,则背景根本不显示。如果我忽略它,那么当我滚动时,背景颜色会在整个 tableView 中跳跃。
仅供参考,我已在 viewDidLoad() 中正确注册了单元格
我认为这些代码足以解释这种情况。感谢任何指针:)
将单元格背景标记为红色
func markRED(cell: EntrantCell) {
var timeOut: String {
let currentDateTime = Date()
let formatter = DateFormatter()
formatter.timeStyle = .medium
return formatter.string(from: currentDateTime)
}
if let indexPath = self.entrantsTable.returnIndexPath(cell: cell) {
entryStatusGrid[indexPath.row] = 2
entrantTime[indexPath.row].append("OUT- \(timeOut)")
entrantsTable.cellForRow(at: indexPath)?.backgroundColor = #colorLiteral(red: 0.7647058964,green: 0.01910983652,blue: 0.008289327978,alpha: 1)
entrantsTable.reloadData()
}
print(entrantTime)
print(entryStatusGrid)
// Todo: Handle proper space status for global button
Entrant.updateStatus(entryStatusGrid: entryStatusGrid,button: spaceStatus)
}
TableView 扩展
extension EntrySession: UITableViewDataSource {
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return entryGrid.count
}
// Todo: Handle proper deque for reusable cells
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let addEntrantCell = entrantsTable.dequeueReusableCell(withIdentifier: Global.headerCellIdentifier,for: indexPath) as! AddEntrantCell
let entrantCell = entrantsTable.dequeueReusableCell(withIdentifier: Global.bodyCellIdentifier,for: indexPath) as! EntrantCell
if indexPath.row == 0 {
addEntrantCell.delegate = self
addEntrantCell.entrantNameTextField.text = entryGrid[indexPath.row].name
addEntrantCell.entrantCompanyTextField.text = entryGrid[indexPath.row].company
return addEntrantCell
} else {
entrantCell.delegate = self
entrantCell.nameLabel.text = entryGrid[indexPath.row].name
entrantCell.companyLabel.text = entryGrid[indexPath.row].company
return entrantCell
}
}
}
自定义单元格重用()
override func prepareForReuse() {
super.prepareForReuse()
name.text = nil
status.text = nil
backgroundColor = nil // When i do this the background color does not change...
}
override func setSelected(_ selected: Bool,animated: Bool) {
super.setSelected(selected,animated: animated)
}
@IBAction func inButton(_ sender: UIButton) {
delegate?.markRED(cell: self)
}
@IBAction func outButton(_ sender: UIButton) {
delegate?.markBLUE(cell: self)
}
解决方法
您需要始终将其设置为合适的值。
if shouldSetBackgroundColor {
backgroundColor = .brown
} else {
backgroundColor = nil
}
假设您只初始化了 4 个单元格。
然后显示4个单元格。假设所有人都将 shouldSetBackgroundColor
设置为 true
。因此,您会看到所有 4 个单元格的 backgroundColor 都变为 brown
。到目前为止一切顺利。
现在是您的第 5 个单元格。如果您没有在单元格上将 shouldSetBackgroundColor
设置为 false
或者没有一些逻辑来更改 backgroundColor
的颜色,那么由于单元格被重复使用,{{ 1}} 不会改变。它将保持设置为 backgroundColor
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。