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这将被称为当你使用此方法注册一个笔尖:
---以下旧文章---
在Xcode 6中,您必须在 类(如RDCell,它是UICollectionViewCell的子类)中提供额外的init(编码器:)初始化程序。 当类获取从故事板或xib文件初始化的 时,此初始化程序被调用而不是init(框架:)。这不是我们的情况,但 我们仍然需要提供init(coder :)。我们可以使用Xcode提供给我们的解决方案 。在问题导航点击该 说,一个错误“‘必要’初始化‘的init(编码器:)’必须由 子‘UICollectionViewCell’来提供”,
是啊,我刚刚意识到,星期一早上该死! :)谢谢 –
@JacopoPenzo我感觉你! :) np man,GL,顺便说一句,如果你有相同的重用标识符,只在VC的“viewDidLoad”中注册一次,否则你需要为每个唯一标识符注册一次。 – 2017-01-23 00:14:07
我正在使用'IGListKit',所以没有注册登记:) –