2017-05-28 32 views
0

如何初始化集合视图单元格的图像没有故事板或笔尖?如何在没有Storyboard或nib的情况下初始化带有图像的collectionViewCell?

我建立ImagePicker,并希望做没有故事板

所以用故事板的工作代码是这样,但如何以编程方式做到这一点?

class PhotosCollectionViewCell: UICollectionViewCell { 
    @IBOutlet weak var imageView: UIImageView! 

    var image: UIImage? { 
     get { return imageView.image } 
     set { imageView.image = newValue } 
    } 

    override func prepareForReuse() { 
     super.prepareForReuse() 
     self.imageView.image = nil 
    } 

} 

我改变了代码,而无需IBOutlet中:

class PhotosCollectionViewCell: UICollectionViewCell { 
    var imageView: UIImageView! 
    public var asset: PHAsset! 
    public var cellTappedAction: ((PHAsset) ->()) = { _ in } 

    var image: UIImage? { 
     get { return imageView.image } 
     set { imageView.image = newValue } 
    } 

    override init(frame: CGRect) { 
     self.imageView = UIImageView() 
     super.init(frame: frame) 
     self.imageView.image = self.image 
     self.imageView.frame = self.frame 
     self.addSubview(self.imageView) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
//  fatalError("init(coder:) has not been implemented") 
    } 

    override func prepareForReuse() { 
     super.prepareForReuse() 
     self.imageView.image = nil 
    } 
} 

控制器:

self.collectionView?.register(PhotosCollectionViewCell.self, forCellWithReuseIdentifier: "Cell") 

所以第一张图片,而不IBOutlet中,第二个与它

Non storyboard cell storyboard cell

回答

0

注册您的类viewDidLoad()

collectionView.register(PhotosCollectionViewCell.self, forCellReuseIdentifier: "photosCell") 

出列的单元格中cellForItem和配置单元的子视图

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photosCell", for: indexPath) 
// configure cell subviews 

记住要初始化你的子视图中PhotosCollectionViewCell,你将不会被使用IBOulets

override init(frame: CGRect) { 
    super.init(frame: frame) 
    imageView.frame = contentView.bounds 
    self.contentView.addSubview(imageView) 
} 
+0

没有了这一切,它编译,但我在我的收藏查看空ImageViews,更新我的回答 –

+0

需要指定一个框架和在你看到任何东西之前设置'image'属性,也不要忘记'self.addSubview(imageView)' –

+0

我已经更新了我的代码和答案,你可以看看吗? –

-1

如果您试图初始化您的单元类一个特定的形象,你应该能够做到这一点通过重写init方法

override init(frame: CGRect) { 
    super.init(frame: frame) 
    //set initial image here 
} 
相关问题