我有一个带有标签和collectionView的类,这是我的代码。
class CardSensors: UIView {
@IBOutlet weak var botName: UILabel!
@IBOutlet weak var sensorsCollectionView: UICollectionView!
var viewModel: NewsFeedViewModel! {
didSet {
setUpView()
}
}
override func awakeFromNib() {
super.awakeFromNib()
let nibName = UINib(nibName: "SensorCollectionViewCell", bundle:nil)
sensorsCollectionView.register(nibName, forCellWithReuseIdentifier: "SensorCollectionViewCell")
// Initialization code
}
func setUpView() {
botName.text = viewModel.botName
}
}
显然,我的单元格具有正确的Id和正确的重用标识符。
当我试着这样叫笔尖的时候。
let sensorView = CardSensors()
sensorView.awakeFromNib()
我得到
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
。我试图强迫这些值,但总有一些错误。我做错什么了?
最佳答案
正如其他人提到的,您不应该手动调用awakeFromNib(),它类似于viewDidLoad()和viewWillAppear()是如何被自动调用的,操作系统会启动它,让您知道您的视图已经被加载。
要初始化视图,可以使用以下静态函数,该函数允许您调用类来创建CardSensors的新实例。
class CardSensors: UIView {
@IBOutlet weak var botName: UILabel!
@IBOutlet weak var sensorsCollectionView: UICollectionView!
var viewModel: NewsFeedViewModel! {
didSet {
setUpView()
}
}
static func loadFromNib() -> CardSensors {
return Bundle.main.loadNibNamed("CardSensors", owner: nil, options: nil)?.first as! CardSensors
}
override func awakeFromNib() {
super.awakeFromNib()
sensorsCollectionView.register(nibName, forCellWithReuseIdentifier: "SensorCollectionViewCell")
}
func setUpView() {
botName.text = viewModel.botName
}
}
let sensorView = CardSensors.loadFromNib()