2015-07-08 2 views
0

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

Вот как это выглядит, когда открывается приложение: Original view

Вот как это выглядит после прокрутки и выключение:

after scrolling

Это код, который dequeues ячейки и добавляет метку:

func collectionViewTableLayoutManager(manager: DRCollectionViewTableLayoutManager!, collectionView: UICollectionView!, cellForRow row: UInt, column: UInt, indexPath: NSIndexPath!) -> UICollectionViewCell! { 

let cell = collectionView.dequeueReusableCellWithReuseIdentifier(collectionViewCellIdentifier, forIndexPath: indexPath) as! UICollectionViewCell 

cell.layer.borderColor = UIColor.blueColor().CGColor 
cell.layer.borderWidth = 1 

let subViews = cell.contentView.subviews 

let labels = subViews.filter {$0 is UILabel } as! [UILabel] 
let label: UILabel 


if let lbl = labels.first { 
    label = lbl 

} else { 

    label = UILabel(frame: cell.bounds) 
    label.font = UIFont.systemFontOfSize(10) 
    label.autoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth 
    label.textAlignment = NSTextAlignment.Center 
    label.backgroundColor = UIColor.clearColor() 
    cell.addSubview(label) 
} 

label.text = "\(indexPath.section):\(indexPath.row)/\(row):\(column)" 

return cell 

} 

Любые идеи? Это строка label.text, и ячейка получает разные значения для IndexPath и строки и столбца. Я, однако, что они были синхронизированы, чтобы правильно рисовать ячейку с правильной информацией. (Все это отлично работает в Obj C)

+0

Я думаю, проблема заключается в том, что она всегда идет в случай «else», поэтому она просто добавляет больше ярлыков в ячейку, и они перекрывают друг друга. – almas

+0

перестают добавлять subviews в метод cellForRow. его создание снова и снова рассматривается в одной строке. Добавьте ярлык в ячейку в xib или initWithFrame: С помощью Cell выберете его через IBOutlets или viewWithTag: –

ответ

2

Вы добавляете ярлык в ячейку напрямую, но проверяете наличие метки в ячейке contentView. Попробуйте добавить ярлык в ячейку contentView, и он должен работать.

Обычно, если вы знаете, что всем этим ячейкам понадобится эта метка, вы должны создать новый класс ячеек, в котором уже есть свой собственный ярлык. Таким образом, источник данных просмотра коллекции не должен проверять содержимое ячейки и условно создавать метку; метка уже будет присутствовать, чтобы принять строку.

+0

Абсолютно правильно. Это исправило это. Я понимаю концептуально о классе ячеек и почему это имеет смысл. Я посмотрю, смогу ли я его реализовать. – tangobango

+0

Другой вариант: в файле prepareForReuse ячейки вы можете удалить ярлык. Он будет успешно создан вашим существующим кодом. –

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