iOS Swift:加载包含UICollectionView的XIB文件导致nil错误?

时间:2017-08-28 08:00:42

标签: ios swift xib

我在.xib文件中创建了UICollectionView,如下所示:

enter image description here

根据这篇文章:Can´t add items to UICollectionView inside UIView xib

我们了解到,您无法在.xib中包含的UICollectionViewCell中直接添加UICollectionView,而是必须创建另一个仅包含UICollectionViewCell的.xib,这是我做了什么:

enter image description here

我创建了一个GridViewCell类,并将其添加为UICollectionViewCell的自定义类:

class GridViewCell: UICollectionViewCell
{
    @IBOutlet var clothingImageView: UIImageView!

    override func awakeFromNib()
    {
        super.awakeFromNib()
        // Initialization code

    }
}

我还创建了一个GridViewGallery类,并与我的UICollectionView .xib文件相关联:

extension GridViewGallery: UICollectionViewDelegate
{

}

extension GridViewGallery: UICollectionViewDataSource
{
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return clothingImages.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "GridViewCell", for: indexPath) as! GridViewCell

        cell.clothingImageView.image = clothingImages[indexPath.row].image

        return cell
    }
}

class GridViewGallery: UIView
{
    @IBOutlet var gridLayoutCollectionView: UICollectionView!

    var clothingImages = [INSPhotoViewable]()

    override init(frame: CGRect)
    {
        super.init(frame: frame)
    }

    required public init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)

        let gridViewCell = UINib(nibName: "GridViewCell", bundle: nil)

        gridLayoutCollectionView.register(gridViewCell, forCellWithReuseIdentifier: "GridViewCell")
    }


    func storeGridViewImages(photos: [INSPhotoViewable])
    {
        clothingImages = photos

        gridLayoutCollectionView.dataSource = self
        gridLayoutCollectionView.delegate = self
    }
}

但是,当我尝试将XIB文件加载到另一个类中的unexpectedly found nil while unwrapping an Optional value时,出现UIView错误:

@IBAction func gridViewLayout(_ sender: UIBarButtonItem)
{
    if let gridView = Bundle.main.loadNibNamed("GridViewGallery", owner: self, options: nil)?.first as? GridViewGallery
    {
        print("GRID VIEW FOUND")

        self.addSubview(gridView)
    }
}

GridViewGallery文件所有者的自定义类为空,因为我在UIView属性上设置了自定义类,而不是在第一个屏幕截图中看到的:

enter image description here

但是,如果我将文件所有者的自定义类设置为GridViewGallery并将自定义类保留为UIView本身的空白,则会出现错误{{1 }}

我不确定我是否理解导致此问题的原因,以及我应该设置自定义类的方式。

有人可以帮助我吗?

感谢。

0 个答案:

没有答案