【问题标题】:Loading Multiple Xib View in one cell在一个单元格中加载多个 Xib 视图
【发布时间】: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
    }

【问题讨论】:

    标签: swift uitableview tableview xib custom-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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 2012-08-25
    • 1970-01-01
    • 2012-10-29
    • 2020-07-30
    相关资源
    最近更新 更多