Swift - 子类化 UICollectionViewCell 未加载 IBOutlet 属性



我来自 Obj-C,我正在努力在 Swift 中做一些超级基本的事情!

我有一个自定义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()函数并且它有效,但这绝对不是正确的地方。

我该如何解决这个大问题?

编辑

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

编辑:抱歉,您似乎在我的回答之前编辑了您的问题,似乎当您从 XIB 加载它时,您可以运行 awakeFromNib,当您使用此方法注册笔尖时将调用它:

Apple Source UICollectionView

苹果来源UITableView

---下面的旧帖子---

在 Xcode 6 中,您必须提供额外的 init(coder:)中的初始值设定项 像RDCell这样的类,它是UICollectionViewCell的子类。 调用此初始值设定项而不是 init(frame:)当类得到 从情节提要或 XIB 文件初始化。这不是我们的情况,而是 我们仍然需要提供 init(编码器:)。我们可以使用解决方案 由Xcode提供给我们。在"问题导航器"中,单击一个错误 说"'必需'初始值设定项'init(编码器:)'必须由以下人员提供 'UICollectionViewCell'的子类",

最新更新