【问题标题】:Display a xib view into a UITableView Cell在 UITableView 单元格中显示 xib 视图
【发布时间】: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 视图正确填充。我使用断点检查了这一点。

有人知道我做错了什么吗?

非常感谢您的帮助!!

【问题讨论】:

    标签: swift xcode uitableview addsubview


    【解决方案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()

    【讨论】:

    【解决方案2】:

    不要尝试一次设置所有单元格。

    您应该实现UITableViewDataSource 协议并使用tableView(_:cellForRowAt:) 方法配置每个单元。在此方法中,您可以调用register(_:forCellReuseIdentifier:) 将您的XIB 用于新创建的单元格。

    有很多关于创建表格视图的教程,您可以在其中找到执行此操作的分步说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多