ViewController里面的CollectionView

时间:2016-04-03 23:00:16

标签: ios iphone swift uicollectionview

我知道那里已有问题,但我不理解他们,或者我只是不知道自己在做什么。因此,当我尝试运行我的应用程序时,我收到此错误

  

断言失败 - [UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:]   由于未捕获的异常而终止应用程序' NSInternalInconsistencyException',原因:'无法使类型的视图出列:具有标识符DateCell的UICollectionElementKindCell - 必须为标识符注册nib或类或连接原型单元格故事板'

我不明白为什么我会这样或如何解决它。

我有一个我已注册的细胞类

import Foundation
import UIKit

class CVCell: UICollectionViewCell {
    @IBOutlet weak var myCellLabel: UILabel!
}

然后这是我的viewController:

import UIKit

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {    

    private let reuseIdentifier = "DateCell"

    override func viewDidLoad() {
        initializeVars()
        //moreDateInfo()
    }

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

    // make a cell for each cell index path
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        // get a reference to our storyboard cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CVCell

        // Use the outlet in our custom class to get a reference to the UILabel in the cell
        cell.myCellLabel.text = String(startOfMonthDate)

        if (startOfMonthDate == numOfDaysInThisMonth) {
            startOfMonthDate = 1
        } else {
            startOfMonthDate++
        }

        //cell.backgroundColor = UIColor.yellowColor() // make cell more visible in our example project
        cell.layer.borderColor = UIColor.blackColor().CGColor
        cell.layer.borderWidth = 1
        cell.layer.cornerRadius = 10

        return cell
    }

    // MARK: - UICollectionViewDelegate protocol

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        // handle tap events
        print("You selected cell #\(indexPath.item)!")
    }
    func collectionView(collectionView: UICollectionView, didHighlightItemAtIndexPath indexPath: NSIndexPath) {
        let cell = collectionView.cellForItemAtIndexPath(indexPath)
        cell?.backgroundColor = UIColor.blackColor()
    }


    // change background color back when user releases touch
    func collectionView(collectionView: UICollectionView, didUnhighlightItemAtIndexPath indexPath: NSIndexPath) {
        let cell = collectionView.cellForItemAtIndexPath(indexPath)
        cell?.backgroundColor = UIColor.whiteColor()
    }

这是我的故事板:

4 个答案:

答案 0 :(得分:1)

这一行:

let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CVCell

实际上并未注册您的CVCell类。为此,您应在registerClass:forCellReuseIdentifier:中使用viewDidLoad。或者,在故事板中选择单元格,在右侧的属性检查器中输入" DataCell'在"重用标识符"。

答案 1 :(得分:1)

你的手机名称错误是“DateCell”

您可能需要注册nib类,如下所示

self.collectionViewCategory.registerNib(UINib(nibName:“SelectCategoriesCell”,bundle:nil),forCellWithReuseIdentifier:reuseIdentifier)

答案 2 :(得分:1)

在我的带有原型单元格的故事板上,不需要注册该类。故事板照顾到了这一点。

答案 3 :(得分:0)

哇我有拼写错误.....永远不会忘记那些拼写错误。

private let reuseIdentifier = "DateCell"

应该是“DataCell”