在 UITableView 单元格中显示 xib 视图
Posted
技术标签:
【中文标题】在 UITableView 单元格中显示 xib 视图【英文标题】:Display a xib view into a UITableView Cell 【发布时间】:2017-06-05 09:45:27 【问题描述】:我在 xib 文件中创建了一个视图,该文件加载到名为“ExperienceScreen”的主 ViewController 中。将此 xib 视图添加到 ExperienceScreen 效果很好。问题是我想在 UITableViewCel 中添加这个 xib 视图。我正在使用以下代码来做到这一点:
let experiences = service.getExperiences()
// 3. Loop through the array of experiences
for element in experiences
if let customView = Bundle.main.loadNibNamed("ExperienceDetail", owner: self, options: nil)?.first as? ExperienceDetail
customView.lblTitle.text = element.title
customView.lblCompany.text = element.company
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell
cell.addSubview(customView)
cell.bringSubview(toFront: customView)
tableView.reloadData()
启动时,子视图不显示在 UITableViewCell 中。 customView 视图用 xib 视图正确填充。我使用断点检查了这一点。
有人知道我做错了什么吗?
非常感谢您的帮助!!
【问题讨论】:
【参考方案1】:如果你想将你的 xib 文件显示为 UITableViewCell,那么下面的场景可以工作 1.确保你的xib类是UITableViewCell的子类。 2.注册你的xib
//class of xib file
class TableCell: UITableViewCell
static let identifier = "TableCell"
static let nib = UINib(nibName: "TableCell", bundle: nil)
// In view controller
func setupTableView()
tableView.dataSource = self
tableView.delefate = self
tableView.register(TableCell.nib, forCellReuseIdentifier:
TableCell.identifier)
在 viewDidLoad() 中调用 setupTableView()
【讨论】:
感谢您的回复!不幸的是,它仍然没有显示。你在我的代码中看到问题了吗:dropbox.com/s/zr2eknaeovks381/Experiences.swift?dl=0dropbox.com/s/op6kg8a4eh2u0i0/ExperienceDetail.swift?dl=0 在 cellForRowAt 中改变 let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell let cell = tableView.dequeueReusableCell(withIdentifier: ExperienceDetail.identifier) as! ExperienceDetail 并根据您的需要填充 tableCell【参考方案2】:不要尝试一次设置所有单元格。
您应该实现UITableViewDataSource
协议并使用tableView(_:cellForRowAt:)
方法配置每个单元。在此方法中,您可以调用register(_:forCellReuseIdentifier:)
将您的XIB 用于新创建的单元格。
有很多关于创建表格视图的教程,您可以在其中找到执行此操作的分步说明。
【讨论】:
以上是关于在 UITableView 单元格中显示 xib 视图的主要内容,如果未能解决你的问题,请参考以下文章
从 collectionView 单元格中获取和更新 UITableView 单元格单击