Ios 当UITableView在nib中声明时,UITableViewCell nil IBOutlets
首先,如果我说的是错的,我很抱歉,因为这是我第一次尝试使用nibs 我有一个UIViewController“MainVC”,它用一个nib文件初始化(我决定这样做是因为它是一个弹出窗口,更有意义),我想在UIView中嵌入另一个视图控制器“rendersviewcontroller”。为此,我愿意: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
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
}
}