通过投射我自己的 collectionViewCell 导致 Xcode Swift 错误

Posted

技术标签:

【中文标题】通过投射我自己的 collectionViewCell 导致 Xcode Swift 错误【英文标题】:Xcode Swift error by casting my own collectionViewCell 【发布时间】:2021-08-20 15:39:26 【问题描述】:

我尝试创建自己的 collectionViewCell。但是通过将其转换为 cellForItemAt indexPath 方法会引发错误。 我不知道为什么。 我希望你能帮助我。

import UIKit

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 

    // MARK: Outlets
    @IBOutlet weak var testCollectionView: UICollectionView!
    
    
    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        self.testCollectionView.register(TestCollectionViewCell.self, forCellWithReuseIdentifier: "testCell")
    
    
    
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 10
    
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "testCell", for: indexPath) as! TestCollectionViewCell
        
        cell.testLabel.text = "Hihi Test!"
        
        return cell
    
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 

        return CGSize(width: view.frame.width, height: 80)
    

这是 collectionViewCell 类:

import UIKit

class TestCollectionViewCell: UICollectionViewCell 
    
    var testLabel: UILabel = 
        let label = UILabel()
        
        return label
    ()
    
    override init(frame: CGRect) 
        super.init(frame: frame)
        
        addSubview(testLabel)
        
        testLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        testLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
    
    
    required init?(coder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

这是启动应用程序的错误:

【问题讨论】:

也许可以尝试将TestCollectionViewCell 重命名为CollectionViewCellTest(可能行不通,但我想我记得一些关于不使用前面的“Test”命名类) 您可以更新之前的问题,而不是创建新问题。尽管。 TestCollectionViewCell是纯代码,还是用xib设置的?你的collectionView IBOutlet 在情节提要中有一个单元格吗? 是的。 TestCollectionViewCell 只是代码(参见附录中的代码)。是的,在我的故事板中,我有一个测试单元。 谢谢你,但很遗憾重命名文件不起作用。 Storyboard 的collectionView 中有一个testCell?你设置了它的reuseIdentifier吗?它的类?如果TestCollectionViewCell 是纯代码,只需从情节提要中删除多余的单元格即可。 【参考方案1】:

首先,将您的单元格注册到viewDidLoad 方法中:

testCollectionView.register(UINib(nibName: "TestCollectionViewCell", bundle: Bundle(for: type(of: self))), forCellWithReuseIdentifier: "testCell")

【讨论】:

嗨。感谢您的回答!不幸的是,它对我不起作用。它抛出此错误:线程 1:“无法在包中加载 NIB:'NSBundle /timmeyerdiercks/Library/Developer/CoreSimulator/Devices/6E88FC2B-FD4D-459D-AAC8-E75BB959B603/data/Containers/Bundle/Application/ EBF5B5AF-1267-4602-99DE-D54FDE617EF2/CollectionViewTestApp.app>(已加载)',名称为 'CollectionViewCellTest'"

以上是关于通过投射我自己的 collectionViewCell 导致 Xcode Swift 错误的主要内容,如果未能解决你的问题,请参考以下文章

自己实现带有光线投射的 phong 照明

我可以根据自己的需要为 Google Home 实施投射功能吗?

Libgdx Box2d Raycast无法投射多条光线

通过硬件按钮更改音量时投射图标

使用 CastCompanionLibrary 仅投射音频?

投射音频流时投射设备冻结