在nib中声明UITableView时,UITableViewCell不包含IBOutlets

时间:2018-11-04 16:56:07

标签: ios swift uitableview nib

首先,对不起,如果我说错了,因为这是我第一次尝试使用笔尖。

我有一个用nib文件初始化的UIViewController“ MainVC”(我决定是因为它是弹出窗口并且更有意义),并且我想在UIView中嵌入另一个视图控制器“ RenderersViewController”。为此,我这样做:

override func viewDidLoad() {
    super.viewDidLoad()

    let renderersVC = RenderersViewController(withRowHeight: 42)
    addChild(renderersVC)
    renderersVC.view.frame = renderersContainerView.bounds
    renderersContainerView.addSubview(renderersVC.view)
    renderersVC.didMove(toParent: self)

}

RenderersViewController是具有UITableView且具有自定义初始化和笔尖的UIViewController

enter image description here

init(withRowHeight rowHeight:CGFloat) {
    self.rowHeight = rowHeight

    super.init(nibName: "RendererVCNib", bundle: nil)

}

当RenderersViewController didSet中的tableView时,我注册了一个自定义UITableViewCell,它也拥有自己的笔尖。

@IBOutlet weak var renderersTableView: UITableView!{
    didSet{
        renderersTableView.register(RenderersTableViewCell.self, forCellReuseIdentifier: "mycell")
        renderersTableView.bounces = false
        renderersTableView.dataSource = self
        renderersTableView.delegate = self
    }
}

以及在cellForIndex

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let rendererCell = tableView.dequeueReusableCell(withIdentifier: "mycell", for: indexPath) as! RenderersTableViewCell

    if indexPath.row < rendererArray.count{

        let cpRendererItem = rendererArray[indexPath.row]

        //rendererCell.rendererNameLabel.text = cpRendererItem.friendlyName
        //rendererCell.rendererImageView.sd_setImage(with: cpRendererItem.iconUrl, placeholderImage: UIImage(named:"upnp_ic")!)

        rendererCell.rendererNameLabel.text = "HELLO"
        rendererCell.rendererImageView.image = UIImage(named:"upnp_ic")

    }

    return rendererCell

}

但是它崩溃了,因为IBOutlets没有了... enter image description here

RenderersTableViewCell Nib

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

代替注册单元格的类,您需要注册用于实例化单元格的nib文件:

@IBOutlet weak var renderersTableView: UITableView!{
    didSet{
        let nibFile = UINib(nibName: "cells_xib_file", bundle: nil)
        renderersTableView.register(nibFile, forCellReuseIdentifier: "mycell")
        renderersTableView.bounces = false
        renderersTableView.dataSource = self
        renderersTableView.delegate = self
    }
}

除此之外,您的xib文件看上去有点错误。对于单元xib,它应具有UITableViewCell(根据情况为RenderersTableViewCell)作为层次结构中的顶视图组件。最终,您应该获得类似于this的东西。