TableViewCell Nib error: loaded the nib but the view outlet was not set
TableViewCell Nib error: loaded the nib but the view outlet was not set
正在尝试创建一个 tableView 单元格 xib,但我遇到了错误 "loaded the nib but the view outlet was not set"
我读过很多帖子,大多数人说将 "view" 从文件所有者拖到 IB 视图。
但是,如果您从图像中注意到,我没有 "view" 作为选项。我重新创建了一个具有相同结果的 xib。可能是 Swift 4.2 中的新内容。
任何帮助都是巨大的。
class VersionTVCell: UITableViewCell {
@IBOutlet weak var versionNumber: UILabel!
@IBOutlet weak var versionDetail: UILabel!
@IBOutlet weak var versionDate: UILabel!
}
class VersionTVC: UITableViewController {
fileprivate var versions: Array<VersionModel> = [VersionModel]()
override func viewDidLoad() {
super.viewDidLoad()
self.versions = AppDelegate.getRLDatabase().getVersion()
tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 70
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "VersionCell", for: indexPath) as! VersionTVCell
cell.versionNumber.text = self.versions[(indexPath as NSIndexPath).row].versionNumber
cell.versionDetail.text = self.versions[(indexPath as NSIndexPath).row].versionDetail
cell.versionDate.text = self.versions[(indexPath as NSIndexPath).row].versionDate
return cell
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.versions.count
}
}
下面是两个屏幕截图,第一个来自单元格,第二个来自文件所有者。
我也试过从文件所有者链接到标签。没有帮助。
编辑:
添加我的 addSubView 函数:
@objc func loadVersions() {
let newSubView = AddSubView.toVersions.getView()
let blackBackground = UIView(frame: CGRect(x: 0, y: 65, width: self.view.frame.width, height: self.view.frame.height))
blackBackground.backgroundColor = UIColor.black.withAlphaComponent( 0.7)
UIView.transition(with: self.view, duration: 0.3, options: UIView.AnimationOptions.transitionCrossDissolve,
animations: {self.view.addSubview(self.backgroundView)}, completion: nil)
newSubView.frame = CGRect(x: 0, y: (self.view.frame.height) * 0.1, width: (self.view.frame.width) * 0.9, height: (self.view.frame.height) * 0.8)
newSubView.layer.borderWidth = 1
newSubView.layer.borderColor = UIColor.defaultDialogBorderColor().cgColor
newSubView.layer.cornerRadius = 8.0
newSubView.clipsToBounds = true
self.view.addSubview(newSubView)
}
据我了解,代码中的所有内容都是正确的,因此请应用一些步骤。
1) 确保 Cell 的 class 名称分配正确。
2) 使用此命令清理代码 Shift + option + command + k.
3) 如果以上步骤没有成功。从 tableView 中移除 delegate 和 dataSource Outlets UI 并在此行之后手动写入。
tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
我试过你的代码,它工作正常。
确保您没有将 UITableViewCell
class 中的 VersionTVCell
分配给文件所有者并且没有将 @IBOutlet
连接到 xib
文件所有者连接检查器应该类似于下图
此外,尝试删除并重新连接 @IBOutlet
测试示例
正在尝试创建一个 tableView 单元格 xib,但我遇到了错误 "loaded the nib but the view outlet was not set"
我读过很多帖子,大多数人说将 "view" 从文件所有者拖到 IB 视图。
但是,如果您从图像中注意到,我没有 "view" 作为选项。我重新创建了一个具有相同结果的 xib。可能是 Swift 4.2 中的新内容。
任何帮助都是巨大的。
class VersionTVCell: UITableViewCell {
@IBOutlet weak var versionNumber: UILabel!
@IBOutlet weak var versionDetail: UILabel!
@IBOutlet weak var versionDate: UILabel!
}
class VersionTVC: UITableViewController {
fileprivate var versions: Array<VersionModel> = [VersionModel]()
override func viewDidLoad() {
super.viewDidLoad()
self.versions = AppDelegate.getRLDatabase().getVersion()
tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 70
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "VersionCell", for: indexPath) as! VersionTVCell
cell.versionNumber.text = self.versions[(indexPath as NSIndexPath).row].versionNumber
cell.versionDetail.text = self.versions[(indexPath as NSIndexPath).row].versionDetail
cell.versionDate.text = self.versions[(indexPath as NSIndexPath).row].versionDate
return cell
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.versions.count
}
}
下面是两个屏幕截图,第一个来自单元格,第二个来自文件所有者。
我也试过从文件所有者链接到标签。没有帮助。
编辑: 添加我的 addSubView 函数:
@objc func loadVersions() {
let newSubView = AddSubView.toVersions.getView()
let blackBackground = UIView(frame: CGRect(x: 0, y: 65, width: self.view.frame.width, height: self.view.frame.height))
blackBackground.backgroundColor = UIColor.black.withAlphaComponent( 0.7)
UIView.transition(with: self.view, duration: 0.3, options: UIView.AnimationOptions.transitionCrossDissolve,
animations: {self.view.addSubview(self.backgroundView)}, completion: nil)
newSubView.frame = CGRect(x: 0, y: (self.view.frame.height) * 0.1, width: (self.view.frame.width) * 0.9, height: (self.view.frame.height) * 0.8)
newSubView.layer.borderWidth = 1
newSubView.layer.borderColor = UIColor.defaultDialogBorderColor().cgColor
newSubView.layer.cornerRadius = 8.0
newSubView.clipsToBounds = true
self.view.addSubview(newSubView)
}
据我了解,代码中的所有内容都是正确的,因此请应用一些步骤。
1) 确保 Cell 的 class 名称分配正确。
2) 使用此命令清理代码 Shift + option + command + k.
3) 如果以上步骤没有成功。从 tableView 中移除 delegate 和 dataSource Outlets UI 并在此行之后手动写入。
tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
我试过你的代码,它工作正常。
确保您没有将 UITableViewCell
class 中的 VersionTVCell
分配给文件所有者并且没有将 @IBOutlet
连接到 xib
文件所有者连接检查器应该类似于下图
此外,尝试删除并重新连接 @IBOutlet
测试示例