Reputation: 161
Really need your help! I've been through every possible post addressing this issue and nothing seems to work.
So I'm using a .xib file to create a subview within ProfileFoldingCellView.swift, which works perfectly until I attempt to add an IBOutlet in the same class. Here's the code:
import Foundation
import UIKit
class ProfileFoldingCellView: UIView {
@IBOutlet var mainLabel: UILabel!
public var cellIndex: Int = 0
init(index: Int) {
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
cellIndex = index
print("Index: \(cellIndex)")
setupContentView()
}
func setupContentView() {
let contentView = UINib(nibName: "ProfileFoldingCellView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(contentView)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupContentView()
}
}
As you can see, the label IBOutlet is created without any issues and there are no other outdated or unused outlets roaming around.
https://i.sstatic.net/5y7Ra.jpg
I've also made sure to set ProfileFoldingCellView.swift as the file owner's class.
Everything runs perfectly until I link the outlet! Then I get this error:
https://i.sstatic.net/ROcr4.jpg
Trust me, I've tried everything. I've probably re-created the outlet a million times, nothing is working. Any help would be greatly appreciated!
Upvotes: 7
Views: 3564
Reputation: 429
The answer is already mentioned in the upper section. I just want to illustrate it with images so that it can be more understandable.
Step1: Do not assign the class to the file owner and leave it as NSObject
Step2: Select your main view and Assign the class to that view
Step3: Now connect your outlet
Now it will not cause any kind of error related to IBOutlet :)
Upvotes: 0
Reputation: 161
I fixed it!
I simply switched the line
let contentView = UINib(nibName: "ProfileFoldingCellView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
with the following:
let contentView = Bundle.main.loadNibNamed("ProfileFoldingCellView", owner: self, options: nil)?[0] as! UIView
I kept the file owner's class as ProfileFoldingCellView
Upvotes: 3
Reputation: 8106
Leave your File's Owner as NSObject
and set your view class as ProfileFoldingCellView
, your mainLabel
should be connected to the UIView
object and not File's Owner
Upvotes: 9
Reputation: 23701
According to the image you posted, your mainLabel
outlet is not connected to the label... It's connected to the files owner
object which is probably your cell view and not a UILabel
.
Upvotes: 1