Swift -无法将以下类型的视图出队:UICollectionElementKindCell

xmd2e60i  于 2023-05-27  发布在  Swift
关注(0)|答案(7)|浏览(130)

我得到这个错误消息时,试图加载我的项目
由于未捕获的异常“NSInternalInconsistencyException”,正在终止应用程序,原因:'无法将类别的视图出列:带有标识符CustomCell的UICollectionElementKindCell-必须为标识符注册笔尖或类,或者连接情节串连板中的原型单元格。
我的代码是:

extension ViewController: JTAppleCalendarViewDelegate, JTAppleCalendarViewDataSource {
    func configureCalendar(_ calendar: JTAppleCalendarView) -> ConfigurationParameters {
        formatter.dateFormat = "yyyy MM dd"
        formatter.timeZone = Calendar.current.timeZone
        formatter.locale = Calendar.current.locale

        let startDate = formatter.date(from: "2017 01 01")!
        let endDate = formatter.date(from: "2017 12 31")!

        let parameters = ConfigurationParameters(startDate: startDate, endDate: endDate)
        return parameters
    }

    func calendar(_ calendar: JTAppleCalendarView, cellForItemAt date: Date, cellState: CellState, indexPath: IndexPath) -> JTAppleCell {
        let cell = calendar.dequeueReusableJTAppleCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell
        cell.dateLabel.text = cellState.text
        return cell
    }
}

请帮我调试这个问题。谢谢你。
编辑:我已经为单元格添加了标识符,但错误仍然存在。

ffdz8vbo

ffdz8vbo1#

viewDidLoad方法中:您必须使用collectionView对象注册自定义单元格类/xib名称。
如果你只有类自定义类,那么你通过以下方式注册(没有xib文件)

collectionView.register(CustomCell.self, forCellWithReuseIdentifier: "cellId")

如果你既有类,也有xib文件,那么你可以用这种方式注册

collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "cellId")
ma8fv8wu

ma8fv8wu2#

这是因为您还没有将xib注册到UICollectionView。如果您使用Xib的UICollectionViewCell,则必须先注册它。

In viewDidLoad:

写下来:

if let xib = NSNib.init(nibNamed: "TemplateNBgCollectionItem", bundle: nil) {
   self.collectionView.register(xib, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "cvItem"))  
}
bvjveswy

bvjveswy3#

从您粘贴的代码片段来看,我没有看到您在想要出列/使用单元格之前注册它。如所述错误,使用前需要注册电池。

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")

为了您的快速参考,请参阅下面的post -https://www.hackingwithswift.com/example-code/uikit/how-to-register-a-cell-for-uitableviewcell-reuse
截图发布后编辑
从屏幕截图中,您正在使用自定义单元格类'CustomCell',在设置正确的标识符后,请确保在右侧面板的标识检查器中将正确的类名设置为CustomCell。参考下面的屏幕截图。

jjjwad0x

jjjwad0x4#

1.如果你在脚本中使用的单元格不是XIB,那么你需要将reuseIDentifier设置为below

1.如果您使用单独的XIB作为单元格,则需要在ViewDidLoad中添加此行
collectionView.register(UINib(nibName:“NibName”,bundle:nil),forCellWithReuseIdentifier:“reuseIdentifier”)

jgzswidk

jgzswidk5#

这个问题有很多可能性。如果你有collection view的自定义类,那么它应该在identity inspector中设置。它必须是UICollectionViewCell的子类。并且必须在cellforitem委托方法中示例化该子类,必须在attribute inspector中设置适当的reusable identifier。在您的屏幕截图中,似乎Apple calender view是您的集合视图。如果它是第三方库,那么请确保它允许您对自定义单元格进行双端排队!并确保它是UICollectionView的子类。

nzkunb0c

nzkunb0c6#

在我的案例我正在创建一个集合视图与自定义单元格与类

这是我的自定义CollectionView类代码

import UIKit
class Auction_CollectionCell: UICollectionViewCell {

@IBOutlet weak var Productimage: UIImageView!
@IBOutlet weak var name: UILabel!
@IBOutlet weak var bid: UILabel!
@IBOutlet weak var progress: UIProgressView!
@IBOutlet weak var day: UILabel!
@IBOutlet weak var hours: UILabel!
@IBOutlet weak var mins: UILabel!
@IBOutlet weak var secs: UILabel!
@IBOutlet weak var lblday: UILabel!
@IBOutlet weak var lblhours: UILabel!
@IBOutlet weak var lblmin: UILabel!
@IBOutlet weak var lblsecs: UILabel!
@IBOutlet weak var MainView: UIView!

   override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
    }
}

通过CTRL+拖动将脚本中的所有视图连接到自定义类,将创建@IBOutlet。

我这样调用我的自定义类

self.AuctionList =具有NSDictionary内容的NSArray

func collectionView(_ collectionView: UICollectionView,
                    numberOfItemsInSection section: Int) -> Int {
    return self.AuctionList.count
}
func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

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

    cell.lblday.text = "Day"
    cell.lblhours.text = "Hours"
    cell.lblmin.text = "Minutes"
    cell.lblsecs.text = "Secs"

    cell.MainView.layer.cornerRadius = 5
    cell.MainView.backgroundColor = UIColor.white
    cell.MainView.layer.borderWidth = 0.5
    cell.MainView.layer.borderColor = UIColor.gray.cgColor

    return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
 var width = CGFloat(0)
 var height = CGFloat(0)
 if (UIDevice.current.userInterfaceIdiom == .pad){
   width = CGFloat((self.view.bounds.size.width / 4.0) - 15)
   height = CGFloat(246.0)
 }else{
   width = CGFloat((self.view.bounds.size.width / 2.0) - 15)
   height = CGFloat(246.0)
}

   print("Resize Image \(width) \(height)")
   return CGSize(width: width, height: height)
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let dic = AuctionList[indexPath.row] as? NSDictionary{
    Product.product_id = "\((dic["product_id"])!)"
    Product.product_image = "\((dic["image"])!)"
    Product.auction_id = "\((dic["auction_id"])!)"
    performSegue(withIdentifier: "auctionProductDetails", sender: self)
  }      
}

玩得开心,祝你好运。随意编辑我的答案

2w3kk1z5

2w3kk1z57#

我也有同样的问题。环顾四周后,我意识到我有一个小写字母“p”,而它应该是一个大写字母“P”,我用它作为一个标识符。
点击故事板上的collectionView单元格,打开右侧面板。检查属性检查器和集合可重用视图、标识符名称,还检查标识检查器、自定义类名称。

相关问题