在一个单元格中加载多个 Xib 视图
Posted
技术标签:
【中文标题】在一个单元格中加载多个 Xib 视图【英文标题】:Loading Multiple Xib View in one cell 【发布时间】:2018-08-19 10:41:00 【问题描述】:我的tableview有3层
第一个:标题
第二个:部分
第三个:xibviews
我的 tableviewCell 加载 Xibs 视图依赖于 indexPath.row
例如 indexPath.row 在 2 ,我想加载 CDFlightXibView
但是滚动时它太慢
我该怎么办?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
switch indexPath.section
case 0:
print("contract detail")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let vieww = Bundle.main.loadNibNamed("CDContractXibView", owner: self, options: nil)?.first as? CDContractXibFile
vieww?.fillData()
cell.contentView.addSubview(vieww!)
vieww?.frame = cell.contentView.frame
vieww?.center = cell.contentView.center
return cell
case 1:
print("passenger")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let vieww = Bundle.main.loadNibNamed("CDPassengerInFlightXibView", owner: self, options: nil)?.first as? CDPassengerInFlightXibFile
vieww?.fillData()
cell.contentView.addSubview(vieww!)
vieww?.frame = cell.contentView.frame
vieww?.center = cell.contentView.center
return cell
case 2:
print("flight")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let vieww = Bundle.main.loadNibNamed("CDFlightXibView", owner: self, options: nil)?.first as? CDFlightXibFile
vieww?.fillData()
vieww?.detailBtn.addTarget(self, action: #selector(showPassenger(_:)), for: .touchUpInside)
vieww?.detailBtn.tag = indexPath.row
cell.contentView.addSubview(vieww!)
vieww?.frame = cell.contentView.frame
vieww?.center = cell.contentView.center
return cell
default:
print("nothing")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
return cell
【问题讨论】:
【参考方案1】:每次滚动时都会加载多个 xib 文件,所有这些操作都需要计算导致滚动延迟。
尝试为每个状态设计特定的 UITableViewCell 并通过 indexPath.section 案例将它们出列。
【讨论】:
我使用 indexPath.section 将 mainArray 出列用于 header ,并使用 indexPath.row 将 subArray 出列用于每个 header 我的意思是,例如对于“合同详细信息”,创建一个名为“CDContractTableViewCell”的 UITableViewCell 并将“CDContractXibView”放入其 xib 文件中,然后在 cellForRow 方法中,当 indexPath.section 等于 1 时,使用这个:let cell = tableView.dequeueReusableCell(withIdentifier: "contractCell", for: indexPath) as! CDContractTableViewCell
以上是关于在一个单元格中加载多个 Xib 视图的主要内容,如果未能解决你的问题,请参考以下文章
在 ios 中加载每个图像视图和表格视图单元格(包含 ImageView)的进度条