Firstly, sorry If something I say is wrong as this is my first attempt to work with nibs.
I have a UIViewController "MainVC" that gets Initialised with a nib file (I decided that because it is a popup and made more sense) and I want to embed another view controller "RenderersViewController" within a UIView. For doing that I do:
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 is UIViewController that has a UITableView and it has a custom Initialisation and nib
init(withRowHeight rowHeight:CGFloat) {
self.rowHeight = rowHeight
super.init(nibName: "RendererVCNib", bundle: nil)
}
when the tableView in RenderersViewController didSet i Register a custom UITableViewCell that also has it's own nib.
@IBOutlet weak var renderersTableView: UITableView!{
didSet{
renderersTableView.register(RenderersTableViewCell.self, forCellReuseIdentifier: "mycell")
renderersTableView.bounces = false
renderersTableView.dataSource = self
renderersTableView.delegate = self
}
}
and in 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
}
But it crashes because the IBOutlets are nil...
RenderersTableViewCell Nib