在Swift中将UICollectionView嵌入UIView

3

当我尝试在UIView中使用CollectionView时,出现了问题。

这是我的视图的代码示例。

class CampanasView: UIView, UICollectionViewDelegate, UICollectionViewDataSource {

@IBOutlet weak var collectionView: UICollectionView!

class func create() -> CampanasView {
    let nib = UINib(nibName: "CampanasView", bundle: nil)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as? CampanasView

    //if you use xibs:
    view?.collectionView.register(UINib(nibName: "CampanaCell", bundle: nil), forCellWithReuseIdentifier: "CampanaCell")
    view?.collectionView.reloadData()
    return view!
}

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 20
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CampanaCell", for: indexPath) as! CampanaCell


    return cell
}

}

这是xib文件

UIView的Xib文件

在我的ViewController中,我有以下代码将UIView添加到ViewController中

var campanasView: CampanasView?

override func viewDidLoad() {
    super.viewDidLoad()


    self.campanasView = CampanasView.create()
    _ = JAutolayouts.fillContainer(self.contentView, view: self.campanasView!)
}

这是一个错误。

由于发送给类0x10beac100的未识别选择器,终止应用程序,原因为:'+[WinUp.CampanasView collectionView:numberOfItemsInSection:]'


你能分享一下你的 CampanasView xib 文件的设置吗? - Reinier Melian
@Smartcat 当我在 ViewController 中实例化视图时,我使用的方法是 create()。 - Josué H.
是的,我已经在xib中设置了数据源和代理。 - Josué H.
在 ViewDidLoad 方法中设置。 - Shabbir Ahmad
在 containerView 中使用 collectionView? - iOS Geek
显示剩余2条评论
1个回答

3
你的问题与xib的设置有关,你需要取消链接你的集合视图代理和数据源与你的文件所有者,并在你的create方法中添加这两行代码。
    view?.collectionView.dataSource = view
    view?.collectionView.delegate = view

正如我上面所说,您需要取消链接CollectionView的数据源和代理。

enter image description here

你的create方法必须像这样

class func create() -> CampanasView {
        let nib = UINib(nibName: "CampanasView", bundle: nil)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as? CampanasView

        //if you use xibs:
        view?.collectionView.register(UINib(nibName: "CampanaCell", bundle: nil), forCellWithReuseIdentifier: "CampanaCell")
        view?.collectionView.dataSource = view
        view?.collectionView.delegate = view
        view?.collectionView.reloadData()
        return view!
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接