我来自 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'的子类",
源