我在.xib文件中创建了UICollectionView
,如下所示:
根据这篇文章:Can´t add items to UICollectionView inside UIView xib
我们了解到,您无法在.xib中包含的UICollectionViewCell
中直接添加UICollectionView
,而是必须创建另一个仅包含UICollectionViewCell
的.xib,这是我做了什么:
我创建了一个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
属性上设置了自定义类,而不是在第一个屏幕截图中看到的:
但是,如果我将文件所有者的自定义类设置为GridViewGallery
并将自定义类保留为UIView
本身的空白,则会出现错误{{1 }}
我不确定我是否理解导致此问题的原因,以及我应该设置自定义类的方式。
有人可以帮助我吗?
感谢。