gpt4 book ai didi

ios - 静态 TableView 中单元格的内容未显示 SWIFT 3

转载 作者:行者123 更新时间:2023-11-28 06:17:00 25 4
gpt4 key购买 nike

这是我对 tableView(_:cellForRowAt:) 的实现:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let index = indexPath.section
let weekDay = WeekDays.day(at: index)
if self.availability.numberOfTimeslots(for: weekDay) == 0 {
let cell = NotSelectedCell(style: .default, reuseIdentifier: nil)
return cell
}

return UITableViewCell()
}

这是我的自定义表格 View 单元格的代码:

class NotSelectedCell: UITableViewCell {

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code

self.backgroundColor = .red
self.textLabel?.numberOfLines = 0
self.textLabel?.textAlignment = .center;
self.textLabel?.text = "Not Available"
}

}

我也试过初始化自定义单元格 cell = NotSelectedCell() 结果是一样的。内容不显示。 dataSourceviewDelegate 不是问题,因为我正在使用 UITableViewController

这是一张图片 enter image description here

最佳答案

问题是 awakeFromNIB“在从 Interface Builder 存档或 nib 文件加载接收器后准备服务。”但是您正在以编程方式实例化它,因此不会调用该方法。理论上,您可以将代码移至 init(style:reuseIdentifier:),确保在您的实现中调用 super,并在此之后进行任何其他自定义。

但是,在使用静态单元格时,您通常不会以编程方式实例化单元格。 (这是静态单元格的要点,IB 会为您处理一切。)使用静态单元格时,您通常根本不会实现 UITableViewDataSource

我建议使用动态表并有两个单元格原型(prototype),一个具有重用标识符“NotAvailable”,另一个具有“Available”(或您想要的任何标识符)。然后以编程方式实例化具有适当标识符的单元格。 (顺便说一下,这还有一个优点,即带有“NotAvailable”的单元格可以完全在 IB 中设计,并且不需要代码,至少对于那个单元格是这样。)这样, Storyboard负责实例化适当的单元格。

因此,我的动态表中有两个单元格原型(prototype),一个用于“不可用”,一个用于“可用”:

enter image description here

然后代码将查看模型以确定实例化哪个:

// for the complicated cell where I want to show details of some window of availability, add IBOutlets for that cell's labels

class AvailableCell: UITableViewCell {
@IBOutlet weak var startLabel: UILabel!
@IBOutlet weak var stopLabel: UILabel!
@IBOutlet weak var doctorLabel: UILabel!
}

// some super simple model to represent some window of availability with a particular doctor in that office

struct Availability {
let start: String
let stop: String
let doctor: String
}

class ViewController: UITableViewController {

let days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]

let available = ...

override func numberOfSections(in tableView: UITableView) -> Int {
return days.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return available[days[section]]?.count ?? 1
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return days[section]
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// see if there are any available windows for the given day, if not, return "not available" cell

guard let availabilities = available[days[indexPath.section]] else {
return tableView.dequeueReusableCell(withIdentifier: "NotAvailable", for: indexPath)
}

// otherwise, proceed with the more complicated "Available" cell where I have to populate various labels and the like

let cell = tableView.dequeueReusableCell(withIdentifier: "Available", for: indexPath) as! AvailableCell

let availability = availabilities[indexPath.row]
cell.startLabel.text = availability.start
cell.stopLabel.text = availability.stop
cell.doctorLabel.text = availability.doctor

return cell
}
}

这会产生:

enter image description here

现在,很明显,我只是建立了一个 super 原始模型,除了插入三个标签外,没有在“可用”单元格原型(prototype)中进行任何 UI 设计。但它说明了这个想法:如果您的动态表有多个独特的单元格设计,只需为每个具有唯一标识符的单元格原型(prototype)实现并实例化适当的单元格原型(prototype)。通过这种方式,您可以享受完整的单元重用,最大限度地减少必须以编程方式进行的视觉设计等。

关于ios - 静态 TableView 中单元格的内容未显示 SWIFT 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44837003/

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