Swift - Subclassed UICollectionViewCell无法加载IBOutlet属性

问题描述:

我来自Obj-C,我很努力地在Swift中做一些超级基本的东西!Swift - Subclassed UICollectionViewCell无法加载IBOutlet属性

我有一个自定义UICollectionViewCell

class CustomCell: UICollectionViewCell 
{ 
    // Outlets 
    // *************************** 

    @IBOutlet weak var button: UIButton! 

    // Init 
    // *************************** 

    required init?(coder aDecoder: NSCoder) 
    { 
     super.init(coder:aDecoder) 

     setup() 
    } 

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

     setup() 
    } 

    func setup() 
    { 
     button.backgroundColor = .white 
    } 
} 

细胞来自外部的.xib文件中加载,所以init(coder:)被调用初始化,但我的按钮还没有准备好。

如果我更改为button?.backgroundColor该应用程序不会崩溃,但显然没有发生任何事情。

我可以在layoutSubviews()中调用我的setup()函数,它可以工作,但它绝对不是正确的地方。

如何解决这个大问题?笑

编辑

可能是我打电话给setup()awakeFromNib(),对不对? 我通常不使用外部.xib,我不熟悉它们

编辑:对不起你似乎在我的答案之前编辑了你的问题,好像你从XIB加载它,然后你可以运行awakeFromNib这将被称为当你使用此方法注册一个笔尖

Apple Source UICollectionView

Apple Source UITableView

---以下旧文章---

在Xcode 6中,您必须在 类(如RDCell,它是UICollectionViewCell的子类)中提供额外的init(编码器:)初始化程序。 当类获取从故事板或xib文件初始化的 时,此初始化程序被调用而不是init(框架:)。这不是我们的情况,但 我们仍然需要提供init(coder :)。我们可以使用Xcode提供给我们的解决方案 。在问题导航点击该 说,一个错误“‘必要’初始化‘的init(编码器:)’必须由 子‘UICollectionViewCell’来提供”,

Source

+0

是啊,我刚刚意识到,星期一早上该死! :)谢谢 –

+0

@JacopoPenzo我感觉你! :) np man,GL,顺便说一句,如果你有相同的重用标识符,只在VC的“viewDidLoad”中注册一次,否则你需要为每个唯一标识符注册一次。 – 2017-01-23 00:14:07

+0

我正在使用'IGListKit',所以没有注册登记:) –