2014-12-23 1 views
1

У меня есть UICollectionViewCell. В этой камере я ярлык с именем cellTitle, который я объявил в верхнем уровне класса:Как создать метод, который обновляет UICollectionViewCell каждую секунду?

var cellTitle = UILabel() 

изменить текст этой метки в каждой ячейке в методе cellForItemAtIndexPath:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
cellTitle = UILabel(frame: CGRectMake(0, 0, cell.bounds.size.width, 160)) 
cellTitle.numberOfLines = 3 
cell.contentView.addSubview(cellTitle) 
switch indexPath.item { 
    case 0: 
     cellTitle.text = definitions[0] 
    case 1: 
     cellTitle.text = definitions[1] 
    case 2: 
     cellTitle.text = definitions[2] 
    case 3: 
     cellTitle.text = definitions[3] 
    case 4: 
     cellTitle.text = definitions[4] 
    case 5: 
     cellTitle.text = definitions[5] 
    case 6: 
     cellTitle.text = definitions[6] 
    case 7: 
     cellTitle.text = boatTypes[0] 
    case 8: 
     cellTitle.text = boatTypes[1] 
    case 9: 
     cellTitle.text = boatTypes[2] 
    case 10: 
     cellTitle.text = boatTypes[3] 
    case 11: 
     cellTitle.text = boatTypes[4] 
    case 12: 
     cellTitle.text = boatTypes[5] 
    case 13: 
     cellTitle.text = boatTypes[6] 
    case 14: 
     cellTitle.text = "Press to quit game. Time left: \(timerText) seconds" 
    default: 
     break 
    } 
    return cell 
} 

Как вы можете видеть, на cell 14 у меня есть текст, который не установлен в элемент из массива. Я использую timerText из таймера, который я создал, который отсчитывает с интервалом в 1 секунду. Проблема заключается в том, что текст в cell 14, который является timerText, не обновляется, он просто остается на том, что я его впервые установил, что составляет 45. Как создать метод обновления только для cell 14, который не вызывает ошибок? Спасибо за поддержку!

ответ

0

Есть таймер вызова подпрограммы reloadItemsAtIndexPaths для этой ячейки:

myCollectionView.reloadItemsAtIndexPaths([NSIndexPath(forItem: 14, inSection: 0)]) 

Я обновил ваш collectionView:cellForItemAtIndexPath: добавить tag к UILabel так, что он может быть использован повторно. Я также рухнул ваши общие случаи в switch. Я не скомпилировал это, но должен быть близок.

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let specialTag = 123 
    var cellTitle: UILabel 

    if let oldCell = cell.contentView.viewWithTag(specialTag) as? UILabel { 
     // Just reuse the label if it is already there 
     cellTitle = oldCell 
    } else { 
     // Don't have one? Add a new label and give it a tag so we can find it 
     // the next time. 
     cellTitle = UILabel(frame: CGRectMake(0, 0, cell.bounds.size.width, 160)) 
     cellTitle.numberOfLines = 3 
     cellTitle.tag = specialTag 
     cell.contentView.addSubview(cellTitle) 
    } 
    switch indexPath.item { 
    case 0...6: 
     cellTitle.text = definitions[indexPath.item] 
    case 7...13: 
     cellTitle.text = boatTypes[indexPath.item - 7] 
    case 14: 
     cellTitle.text = "Press to quit game. Time left: \(timerText) seconds" 
    default: 
     break 
    } 
    return cell 
} 
+0

Это обновление этикетки, но числа перекрывают друг друга. Как удалить предыдущую метку, чтобы они не перекрывались? Спасибо. –

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

  • Нет связанных вопросов^_^