Table 视图填充错误
Wrong population of Table View
您好!问题是我无法设法用数据填充我的 table 视图。虽然它在某种程度上是正确的,但我意识到该程序一次又一次地将一个视图置于另一个视图之上。下面,我提供了一些与问题相关的代码
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if cell.isHidden == true {
cell.isHidden.toggle()
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let record = records[indexPath.section][indexPath.row]
let view = RecordView(price: record.price, place: record.place, time: record.date?.getDay(), category: record.category)
let cell = tableView.dequeueReusableCell(withIdentifier: "RecordViewCell", for: indexPath) as! RecordViewCell
cell.setRecordView(record: view)
cell.clipsToBounds = true
cell.contentView.backgroundColor = UIColor.clear
cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
return cell
}
此外,
class RecordViewCell: UITableViewCell {
@IBOutlet weak var view: UIView!
func setRecordView(record: RecordView) {
view.addSubview(record)
record.frame = CGRect(x: 5, y: 5, width: view.frame.width - 10, height: 60)
}
override func prepareForReuse() {
super.prepareForReuse()
self.isHidden = true
}
}
This is the link to the pic of how the table looks in general. There you can see that the shadows are overlapped and wrong.
非常感谢。
由于单元格重复使用,当您将子视图添加到您的单元格时,这不是每次都是新单元格,有时它会重复使用一个。
在这种情况下,最好将记录视图作为单元格 属性 并将新记录分配给此 属性。在这种情况下,您将避免在此处使用多个子视图。
另外,我实际上不明白为什么要在 prepareForReuse 中隐藏单元格,这是一种奇怪且不必要的行为。
class RecordViewCell: UITableViewCell {
@IBOutlet weak var recordView: RecordView!
func setRecordView(record: RecordView) {
recordView = record
}
}
整个RecordView
应该由table创建。事实上,每次重用单元格时都会创建一个新视图,因此无法重用视图,这就是重用单元格的全部意义所在。
但是,作为快速修复,您必须始终删除以前的视图:
@IBOutlet weak var view: UIView!
var record: RecordView? {
didSet {
oldValue?.removeFromSuperview()
guard let record = record else { return }
view.addSubview(record)
record.frame = CGRect(x: 5, y: 5, width: view.frame.width - 10, height: 60)
}
}
您好!问题是我无法设法用数据填充我的 table 视图。虽然它在某种程度上是正确的,但我意识到该程序一次又一次地将一个视图置于另一个视图之上。下面,我提供了一些与问题相关的代码
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if cell.isHidden == true {
cell.isHidden.toggle()
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let record = records[indexPath.section][indexPath.row]
let view = RecordView(price: record.price, place: record.place, time: record.date?.getDay(), category: record.category)
let cell = tableView.dequeueReusableCell(withIdentifier: "RecordViewCell", for: indexPath) as! RecordViewCell
cell.setRecordView(record: view)
cell.clipsToBounds = true
cell.contentView.backgroundColor = UIColor.clear
cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
return cell
}
此外,
class RecordViewCell: UITableViewCell {
@IBOutlet weak var view: UIView!
func setRecordView(record: RecordView) {
view.addSubview(record)
record.frame = CGRect(x: 5, y: 5, width: view.frame.width - 10, height: 60)
}
override func prepareForReuse() {
super.prepareForReuse()
self.isHidden = true
}
}
This is the link to the pic of how the table looks in general. There you can see that the shadows are overlapped and wrong.
非常感谢。
由于单元格重复使用,当您将子视图添加到您的单元格时,这不是每次都是新单元格,有时它会重复使用一个。 在这种情况下,最好将记录视图作为单元格 属性 并将新记录分配给此 属性。在这种情况下,您将避免在此处使用多个子视图。 另外,我实际上不明白为什么要在 prepareForReuse 中隐藏单元格,这是一种奇怪且不必要的行为。
class RecordViewCell: UITableViewCell {
@IBOutlet weak var recordView: RecordView!
func setRecordView(record: RecordView) {
recordView = record
}
}
整个RecordView
应该由table创建。事实上,每次重用单元格时都会创建一个新视图,因此无法重用视图,这就是重用单元格的全部意义所在。
但是,作为快速修复,您必须始终删除以前的视图:
@IBOutlet weak var view: UIView!
var record: RecordView? {
didSet {
oldValue?.removeFromSuperview()
guard let record = record else { return }
view.addSubview(record)
record.frame = CGRect(x: 5, y: 5, width: view.frame.width - 10, height: 60)
}
}