在一个单元格中加载多个 Xib 视图

Loading Multiple Xib View in one cell

我的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
    }

您每次滚动时都会加载多个 xib 文件,所有这些操作都需要进行计算,这会导致滚动延迟。

尝试为每个状态设计特定的 UITableViewCell,并按 indexPath.section 例将它们出列。