2016-01-29 2 views
1

У меня есть UICollectionView, который содержит пользовательские UICollectionViewCell «с, здесь соответствующий код: UICollectionView пользовательские элементы не отображаются

class customCell: UICollectionViewCell{ 
    var imgView = UIImageView() 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     commonInit() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     commonInit() 
    } 
    func commonInit(){ 
     imgView.translatesAutoresizingMaskIntoConstraints = false 
     self.addcontentView.addSubview(imgView) 
     //add constraints 
    } 
} 


class CollectionViewController: UICollectionViewController { 
    private let imageLib = [...] //image file name strings 

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell : IconCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(keyIconCellReuse , forIndexPath: indexPath) as! IconCollectionViewCell 

     let image1 = (UIImage(named: imageLib[indexPath.row])?.imageWithRenderingMode(.AlwaysTemplate))! 
     cell.imgView = UIImageView(image: image1) 
     cell.imgView.tintColor = UIColor(white:0, alpha:0.7) 
     cell.userInteractionEnabled = true 

     return cell 

    } 

} 

Это то, что он выглядит сейчас:

1o

+0

Кажется, что вы добавляете новый UIImageView для каждого загруженного изображения. Не могли бы вы использовать метод метода func setUp (imgString: String)? –

ответ

2

Похоже, что cell.setup(imageLib[indexPath.row]) добавляет новый UIImageView с новым изображением вместо повторного использования существующего в отрезанных частях кода.

Пожалуйста, не забудьте инициализировать любые виды в пределах collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) по соображениям безопасности. Просто присвойте соответствующее изображение imageView, принадлежащему ячейке.

Обратите внимание, что ячейки получают многократное использование в виде коллекции.

Edit:

С обновленной вопрос, вы делаете

let image1 = (UIImage(named: imageLib[indexPath.row])?.imageWithRenderingMode(.AlwaysTemplate))! 
    cell.imgView = UIImageView(image: image1) 
    cell.imgView.tintColor = UIColor(white:0, alpha:0.7) 
    cell.userInteractionEnabled = true 

Просто

let image1 = (UIImage(named: imageLib[indexPath.row])?.imageWithRenderingMode(.AlwaysTemplate))! 
cell.imgView.image = image1 

и сделать так много других настроек, как это возможно в commonInit().

+0

, но если я хочу, чтобы массив ячеек загружал массив изображений, что было бы хорошим способом сделать это - я должен положить все в код инициализации в пользовательской ячейке? – Liumx31

+0

Позвольте представлению коллекции выполнить его задание и выберите, какую ячейку положить туда, просто установите изображение в соответствии с 'indexPath'. – SmokeDispenser

+0

Я только что обновил свой код, но, похоже, столкнулся с другой проблемой, не могли бы вы взглянуть? – Liumx31

Смежные вопросы