首页 > 解决方案 > 意外发现 UIView 类型的 @IBOutlet 为 nil

问题描述

我试图使用 xib 文件在另一个视图中创建一个集合视图,如本文中所述

根据他们提供的代码,按照那里的指导完成所有事情(或不做?):

import UIKit

@IBDesignable
class CustomView: UIView {

    @IBOutlet var contentView: UIView!
    @IBOutlet weak var collectionView: UICollectionView!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }
    
    private func commonInit() {
        let bundle = Bundle(for: type(of: self))
        bundle.loadNibNamed("CustomView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = bounds
        contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        contentView.backgroundColor = .red
        initCollectionView()
    }
    
    private func initCollectionView() {
        let nib = UINib(nibName: "CustomCell", bundle: nil)
        collectionView.register(nib, forCellWithReuseIdentifier: "CustomCell")
        collectionView.dataSource = self
    }
}

extension CustomView: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 20
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as? CustomCell else {
            fatalError("can't dequeue CustomCell")
        }
        cell.label.text = "\(indexPath.item)"
        return cell
    }
}

Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value但在线得到错误addSubview(contentView)。检查并连接链接。

标签: iosswiftuiviewuicollectionviewxib

解决方案


推荐阅读