Reputation: 745
Trying to create a tableView cell xib, but am stuck with the error "loaded the nib but the view outlet was not set"
I have read many posts and most say to drag the "view" from File's Owner to the IB view.
However, if you notice from the images, I do not have a "view" as an option. I have recreated a xib with the same results. Maybe new in Swift 4.2.
Any help would be huge.
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
}
}
Below are two screen shots, first from the cell and second from the File's Owner.
I have tried linking from File's Owner to the labels as well. Did not help.
EDIT: Adding my addSubView func:
@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)
}
Upvotes: 0
Views: 1596
Reputation: 636
As per my understanding, all is correct in Code so Apply some step.
1) Make Sure Cell's class name assign with correct Name.
2) clean code with this command Shift + option + command + k.
3) If you not got any success with above step. Remove delegate and dataSource Outlets from the tableView UI and write manually after this line.
tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
Upvotes: 1
Reputation: 1780
I have tried your code and it's just working fine.
Make sure you do not assign VersionTVCell
of UITableViewCell
class to file owner and not connecting @IBOutlet
to xib
File Owner connections Inspector should look alike below image
Also, try deleting and reconnecting @IBOutlet
Tested example
Upvotes: 2