Ios UICollectionView到Swift中的UIView

Ios UICollectionView到Swift中的UIView,ios,swift,uiview,uicollectionview,Ios,Swift,Uiview,Uicollectionview,当我尝试将CollectionView使用到UIView时出现问题 这是我的观点的代码示例 class CampanasView: UIView, UICollectionViewDelegate, UICollectionViewDataSource { @IBOutlet weak var collectionView: UICollectionView! class func create() -> CampanasView { let nib = UINib(nibNa

当我尝试将CollectionView使用到UIView时出现问题

这是我的观点的代码示例

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
}

}
这是锡伯银行

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

var campanasView: CampanasView?

override func viewDidLoad() {
    super.viewDidLoad()


    self.campanasView = CampanasView.create()
    _ = JAutolayouts.fillContainer(self.contentView, view: self.campanasView!)
}
这就是错误所在

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+[WinUp.CampanaView collectionView:numberOfItemsInSection:::未识别的选择器发送到类0x10beac100”


您的问题与xib的设置有关,您需要取消集合视图委托和数据源与文件所有者的链接,并在
create
方法中添加这两行

    view?.collectionView.dataSource = view
    view?.collectionView.delegate = view
正如我上面所说的,您需要取消数据源的链接并委派CollectionView

您的
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!
    }

您可以发布CampanaView xib文件的设置情况吗?还有,谁调用您的create()以及何时调用?请尝试以下操作:加载项viewDidLoad方法collectionView.DataSource=self@Smartcat我在将视图实例化为ViewControlleries时使用的方法create()设置了一个数据源,并将其委托给dexib@user1000