为啥 UICollectionViewCell 在 Interface Builder Xcode7.1 OS X Yosemite 中的出口为零?

Posted

技术标签:

【中文标题】为啥 UICollectionViewCell 在 Interface Builder Xcode7.1 OS X Yosemite 中的出口为零?【英文标题】:Why is UICollectionViewCell's outlet nil in Interface Builder Xcode7.1 OS X Yosemite?为什么 UICollectionViewCell 在 Interface Builder Xcode7.1 OS X Yosemite 中的出口为零? 【发布时间】:2015-11-02 03:52:25 【问题描述】:

我在 Interface Builder 中创建了一个自定义 UICollectionViewCell,当我运行项目时,UICollectionViewCell 的子视图为零,子视图不显示。

我在网上查了一下,有人说“**我在打电话

self.collectionView.registerClass(YNAskQuestionTextCollectionViewCell.self, forCellWithReuseIdentifier: "Cell_Ask_Qustion_text").

如果您正在使用情节提要,则不想调用它。它会覆盖您在故事板中的内容。**"

然后我删除registerClass。但我得到如下错误

init?(coder aDecoder: NSCoder) 的自定义 UICollectionViewCell , 错误是fatal error: init(coder:) has not been implemented: file /Users/nongmeng/Desktop/nongjitong/nongjitong/class/home/conreoller/ask question/YNAskQuestionTextCollectionViewCell.swift, line 48

如果我使用代码添加子视图,它们会显示,一切正常。我想知道为什么。为什么 Interface Builder 中 UICollectionViewCell 的子视图为零。任何人都可以帮助我吗?这是示例项目。 https://github.com/chengyanan/UICollectionView

这是视图控制器

    //MARK: life cycle
    override func viewDidLoad() 
        super.viewDidLoad()

        self.collectionView.registerClass(YNAskQuestionTextCollectionViewCell.self, forCellWithReuseIdentifier: "Cell_Ask_Qustion_text")

        self.collectionView.registerClass(YNAskQuestionImageCollectionViewCell.self , forCellWithReuseIdentifier: "Cell_Ask_Qustion_Image")

        self.collectionView.registerClass(YNAskQuestionLocationCollectionViewCell.self , forCellWithReuseIdentifier: "Cell_Ask_Qustion_Location")

        let flow = UICollectionViewFlowLayout()

        flow.minimumInteritemSpacing = 6
        flow.minimumLineSpacing = 16

        let size = CGSizeMake(self.view.frame.size.width, 100)
        print(size)  
        flow.itemSize = size
        flow.sectionInset = UIEdgeInsetsMake(0, 0, 30, 0)
        flow.scrollDirection = UICollectionViewScrollDirection.Vertical
        self.collectionView.collectionViewLayout = flow

        self.collectionView.backgroundColor = kRGBA(234, g: 234, b: 234, a: 1)

        self.collectionView.bounces = true
    
//MARK:UICollectionViewDataSource    
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int 

        return 3
    


    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 1
    

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

        if indexPath.section == 0 

            let identify = "Cell_Ask_Qustion_text"

            let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identify, forIndexPath: indexPath) as! YNAskQuestionTextCollectionViewCell

            return cell

         else if indexPath.section == 2 

            let identify = "Cell_Ask_Qustion_Location"

            let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identify, forIndexPath: indexPath) as! YNAskQuestionLocationCollectionViewCell

            return cell

        


        let identify = "Cell_Ask_Qustion_Image"

        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identify, forIndexPath: indexPath) as! YNAskQuestionImageCollectionViewCell

        return cell
    

这是自定义 UICollectionViewCell

import UIKit

class YNAskQuestionTextCollectionViewCell: UICollectionViewCell 

    @IBOutlet weak var textView: UITextView!

    override init(frame: CGRect) 
        super.init(frame: frame)

        self.backgroundColor = UIColor.greenColor()

    

    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    


【问题讨论】:

【参考方案1】:

如果您使用的是 nib 文件,则需要注册 nib 文件。检查下面的代码

registerClass 的代码更改为registerNib

 self.collectionView?.registerNib(UINib(nibName: "yourcellclass", bundle: nil), forCellWithReuseIdentifier: "identifier")

【讨论】:

如果我使用 self.collection.registerNib(UINib(nibName: "YNCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "Cell_Image") 。它在这条线上崩溃let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identify, forIndexPath: indexPath) 你有 YNCollectionViewCell.xib 文件吗..? 我没有 YNCollectionViewCell.xib 文件。 @rose 你检查了吗...? 让我们continue this discussion in chat。

以上是关于为啥 UICollectionViewCell 在 Interface Builder Xcode7.1 OS X Yosemite 中的出口为零?的主要内容,如果未能解决你的问题,请参考以下文章

为啥点击 UICollectionViewCell 上的文本会消失?

为啥向 UICollectionViewCell 中的按钮添加操作效果不佳?

不知道为啥我的自定义 UICollectionViewCell 不起作用?

加载 UICollectionView 时崩溃,为啥?

为啥在 URLSessionTask 完成后 indexPath 会发生变化?

为啥 UICollectionView 不滚动其中的 UIButtons?