2017-08-23 27 views
2

我尝试在UIView中使用CollectionView时出现问题。UICollectionView到Swift中的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 
} 

} 

这是厦门国际银行

Xib File of the UIView

在我的ViewController我有这样的代码添加到UIView的视图控制器

var campanasView: CampanasView? 

override func viewDidLoad() { 
    super.viewDidLoad() 


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

这是错误。

终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因是:'+ [WinUp.CampanasView的CollectionView:numberOfItemsInSection:]:无法识别的选择发送到0x10beac100类的

+0

您可以发布如何是你设置你的CampanasView XIB文件? –

+0

另外,谁调用了你的create()和什么时候? – Smartcat

+0

试试这个:加入viewDidLoad方法collectionView.DataSource =自 –

回答

2

你的问题涉及到设置您XIB的,你需要从你的fileOwner取消关联集合视图的委托和数据源,并在您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! 
    }