Swift - Subclassed UICollectionViewCell不加载IBOutlet属性

时间:2017-01-22 23:57:04

标签: ios swift uicollectionviewcell

我来自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该应用并未发生崩溃,但显然没有任何反应。

我可以在setup()中调用我的layoutSubviews()功能,但它确实有效,但它绝对不是正确的选择。

如何解决这个大问题?洛尔

修改

可能我必须从setup()致电awakeFromNib(),对吧? 我通常不使用外部.xib,我不熟悉它们

1 个答案:

答案 0 :(得分:1)

编辑:抱歉看来你在我的回答之前编辑了你的问题,看起来当你从XIB加载它,然后你可以运行awakeFromNib,当你注册一个笔尖时会使用这个方法调用它:

Apple Source UICollectionView

Apple Source UITableView

---旧帖子---

  

在Xcode 6中,你必须提供额外的init(编码器:)初始化器   像RDCell这样的类,它是UICollectionViewCell的子类。   当类得到时,调用此初始化程序而不是init(frame :)   从故事板或xib文件初始化。那不是我们的情况,但是   我们仍然需要提供init(编码器:)。我们可以使用该解决方案   由Xcode提供给我们。在“问题导航器”中单击该错误   说''required'initializer'init(coder :)'必须提供   'UICollectionViewCell'的子类“,

Source