Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当UITableView在nib中声明时,UITableViewCell nil IBOutlets_Ios_Swift_Uitableview_Nib - Fatal编程技术网

Ios 当UITableView在nib中声明时,UITableViewCell nil IBOutlets

Ios 当UITableView在nib中声明时,UITableViewCell nil IBOutlets,ios,swift,uitableview,nib,Ios,Swift,Uitableview,Nib,首先,如果我说的是错的,我很抱歉,因为这是我第一次尝试使用nibs 我有一个UIViewController“MainVC”,它用一个nib文件初始化(我决定这样做是因为它是一个弹出窗口,更有意义),我想在UIView中嵌入另一个视图控制器“rendersviewcontroller”。为此,我愿意: override func viewDidLoad() { super.viewDidLoad() let renderersVC = RenderersViewControll

首先,如果我说的是错的,我很抱歉,因为这是我第一次尝试使用nibs

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

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)

}
RendersViewController是具有UITableView的UIViewController,它具有自定义初始化和nib

当Rendersviewcontroller中的tableView设置时,我注册了一个自定义UITableViewCell,它也有自己的nib

@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

}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
让rendererCell=tableView.dequeueReusableCell(标识符为:“mycell”,用于:indexPath)作为!renderStableViewCell
如果indexath.row
但它崩溃了,因为IBO的出口是零。。。

渲染器StableViewCell Nib


您需要注册用于实例化单元格的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
    }
}
@IBOutlet弱var renderStableView:UITableView!{
迪塞特{
让nibFile=UINib(nibName:“cells_xib_file”,bundle:nil)
register(nibFile,forCellReuseIdentifier:“mycell”)
RenderStableView.bounces=false
RenderStableView.dataSource=self
RenderStableView.delegate=self
}
}

除此之外,您的xib文件看起来有点错误。对于单元xib,它应该具有某种类型的
UITableViewCell
(对于您的案例
RenderersTableViewCell
)作为层次结构中的俯视图组件。最终,您应该会得到类似的结果。

谢谢您的回答,现在我得到“***由于未捕获的异常而终止应用程序'nsInternalInconsistencException',原因:'为标识符注册的无效nib(mycell)-nib必须正好包含一个顶级对象,该对象必须是UITableViewCell实例'”是,这是我错过的。在storiboard中,顶部对象是一个普通视图,但需要将其设置为UITableViewCell(对于案例渲染器StableViewCell),因此视图层次结构应如下所示:Yeei!!有了这张照片,我看得更清楚了一点!它现在没有崩溃。我一直在努力理解文件所有者的意思。如果你附上图片和一点文件所有者的东西,我会接受它并投票…太好了!非常感谢!!!:)伟大的非常感谢!!!:)
@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
    }
}