我应该在UICollectionViewCell的哪个方法中编写只运行一次的代码?

时间:2015-12-23 09:09:06

标签: ios swift swift2 uicollectionviewcell

我希望在设置UICollectionView之后修改imageView.image的布局。

我想知道为我的可重用单元格执行一次代码的正确方法。

到目前为止,适用于我的方法是在cellForRow()方法中将自定义视图绘制在其中,但它会使代码变得混乱。我想在单元格的类中执行代码。

Init(带框架)不起作用。它甚至没有从我的collectionView调用。

此外,如果有人能够快速解释UICollectionViewCell最重要的方法以及何时使用它们,我将不胜感激!

修改

这是我要从cellForRow()中移除的代码并进入单元格的类:

firstProductCell.imageView.image = UIImage(named: "photo1")
firstProductCell.textLabel.text = "Featured title"

let imgview: UIImageView = UIImageView(frame: CGRectMake(0, 0, 1100, 600))
imgview.image = firstProductCell.imageView.image

let whiteView: UIView = UIView(frame: CGRectMake(1200, 0, 600, 600))
whiteView.backgroundColor = UIColor.whiteColor()

let view: UIView = UIView(frame: cell.bounds)
view.addSubview(imgview)
view.addSubview(whiteView)

UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0)
view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
firstProductCell.imageView.image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

2 个答案:

答案 0 :(得分:1)

不幸的是,我没有看到,你是如何创建细胞的,但是: 如果您将自定义单元格类注册到collectionView:

    collection.registerClass(CustomCollectionViewCell.classForCoder(), forCellWithReuseIdentifier: "CellIdentifier")

然后在你使用的cellForItemAtIndexpath中:

let cell : CustomCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("CellIdentifier", forIndexPath: indexPath) as! CustomCollectionViewCell

然后将调用CustomCollectionViewCell的init with frame方法:

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

答案 1 :(得分:0)

awakeFromNib()方法仅被调用一次,因此您可以在此处设置单元格,例如:-

class YourCollectionViewCell: UICollectionViewCell {

    override func awakeFromNib() {
        super.awakeFromNib()

       //do some work here that needs to happen only once, you don’t wanna change them later.
    }
}