[英]Why I have this error when I try to use my own CollectionViewCell class?
1.I'm putting a UICollectionView
into a UIView
. 1.我将一个UICollectionView
放入一个UIView
。
2.I'm using my own UICollectionViewCell
class. 2.我正在使用自己的UICollectionViewCell
类。
3.The error is "Type 'TimeLineViewController' does not conform to protocol UICollectionViewDataSource
" 3.错误为“类型'TimeLineViewController'不符合协议UICollectionViewDataSource
”
4.If I change the return type of func collectionView(collectionView: UICollectionView
, cellForItemAtIndexPath indexPath: NSIndexPath)
to UICollectionViewCell
, there would not be error. 4.如果我将func collectionView(collectionView: UICollectionView
, cellForItemAtIndexPath indexPath: NSIndexPath)
的返回类型更改为UICollectionViewCell
,则不会出现错误。
Here are my codes: 这是我的代码:
import UIKit
class TimeLineViewController: UIViewController, UICollectionViewDataSource,UICollectionViewDelegate {
@IBOutlet weak var TimeLineColleciontView: UICollectionView!
// TODO TODO set cell size permeantly
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width-20,
height: (collectionView.frame.width-20) * 1.2 )
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> TimeLineCollectionViewCell {
let id = "TimeLineCell"
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(id, forIndexPath: indexPath) as! TimeLineCollectionViewCell
return cell
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
override func viewDidLoad() {
super.viewDidLoad()
self.TimeLineColleciontView.backgroundColor = UIColor(white: 0, alpha: 0)
TimeLineColleciontView.dataSource = self
TimeLineColleciontView.delegate = self
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
And my cell class is simple: 我的单元格类很简单:
import UIKit
class TimeLineCollectionViewCell: UICollectionViewCell {
var cover : UIImageView = UIImageView()
var date : UILabel = UILabel()
override func awakeFromNib() {
cover.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.width)
date.frame = CGRect(x: 0, y: 0, width: 300, height: 300)
self.insertSubview(cover, atIndex: 0)
self.insertSubview(date, atIndex: 2)
}
}
For TimeLineViewController
class to conform to UICollectionViewDataSource
protocol, you are supposed to return a UICollectionViewCell
for the cellForItemAtIndexPath
function. 为了使TimeLineViewController
类符合UICollectionViewDataSource
协议,应该为cellForItemAtIndexPath
函数返回一个UICollectionViewCell
。 Since you have changed the function signature (return type) to TimeLineCollectionViewCell
, you are getting this error. 由于您已将函数签名(返回类型)更改为TimeLineCollectionViewCell
,因此出现了此错误。
Make the return type of your cellForItemAtIndexPath
function as UICollectionViewCell
and return the dequeued instance of TimeLineCollectionViewCell
within your function. 将cellForItemAtIndexPath
函数的返回类型设为UICollectionViewCell
并在函数内返回TimeLineCollectionViewCell
的出队实例。 Since UICollectionViewCell
is the parent class of TimeLineCollectionViewCell
, you will not see the error. 由于UICollectionViewCell
是TimeLineCollectionViewCell
的父类,因此您不会看到该错误。
Note: You will have to cast the returned
UICollectionViewCell
value fromcellForItemAtIndexPath
toTimeLineCollectionViewCell
wherever necessary 注意:您必须在必要时将返回的UICollectionViewCell
值从cellForItemAtIndexPath
为TimeLineCollectionViewCell
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.