2015-05-28 3 views
0

Мое приложение имеет UICollectionViewController в ContainerView, что я не могу изменить/обновить метку в любой из пользовательских ячеек. Моя функция loadDidLoad загружает просто загружает массив с 5 экземплярами пользовательского объекта, который содержит изображение и метку. Это будет использоваться позже как мой источник данных.Невозможно обновить ярлык в ячейке UICollectionView (Swift)

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    //self.clearsSelectionOnViewWillAppear = false 

    // Register cell classes 
    //self.collectionView!.registerClass(MyCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 

    // Do any additional setup after loading the view. 
    self.collectionView!.allowsMultipleSelection = true; 

    //UICollectionView setup 
    let singleImage = UIImage(named: "IMG_0800.jpg") 
    let imageName = "Original" 

    for var i=0; i<5; i++ 
    { 
     let vehicleObject = VehicleObject(image: singleImage!, label: imageName) 
     arrayOfVehicles.append(vehicleObject) 
    } 
} 

Этот метод работает, но частично. Когда приложение работает, на самом деле отображается пять изображений, но на этикетке по-прежнему указывается «Ярлык», который является значением по умолчанию из прототипа раскадровки, но фотография по умолчанию из раскадровки заменяется на ту, которую я загрузил в fuxntion viewDidLoad.

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    //Configure the cell 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell 

    cell.backgroundColor = UIColor .blackColor() 
    cell.selectedBackgroundView = UIView(frame: CGRectMake(0, 0, 300, 300)) 
    cell.selectedBackgroundView?.backgroundColor = UIColor .redColor() 

    cell.imageView.image = arrayOfVehicles[indexPath.row].vehicleImage 
    cell.imageLabel = arrayOfVehicles[indexPath.row].vehicleLabel 

    return cell 
} 

Последнее, что этот метод никак не влияет на UILabel в камере. Когда он запускает вызовы println, отображается то, что я ожидаю (обновленные значения), но метка в ячейке просмотра коллекции просто не обновляется. Он всегда читает то же самое, что и в инициализированном в раскадровке. Обновления изображения, на этикетке нет. У меня закончилось интернет, ища это!

func renameAllCellLabels() 
{ 
    var selectedItemsIndexPaths = collectionView?.indexPathsForVisibleItems() 
    for var i=0; i < selectedItemsIndexPaths?.count; i++ 
    { 
     let selectedItemIndexPath = selectedItemsIndexPaths?[i] as! NSIndexPath 
     let cell = collectionView?.cellForItemAtIndexPath(selectedItemIndexPath) as! MyCollectionViewCell 

     let singleImage = UIImage(named: "Shelby.jpg") 

     let i = selectedItemIndexPath.row 
     println(i) 
     println(arrayOfVehicles[i].vehicleLabel.text) 
     println(cell.imageLabel.text) 

     arrayOfVehicles[i].vehicleLabel.text = "Updated" 
     cell.imageLabel.text = "Updated" 

     arrayOfVehicles[i].vehicleImage = singleImage 
     cell.imageView.image = singleImage 

     println(arrayOfVehicles[i].vehicleLabel.text) 
     println(cell.imageLabel.text) 
     println() 
    } 
    collectionView?.reloadItemsAtIndexPaths(selectedItemsIndexPaths!) 
} 
+1

вы имели в виду использовать 'cell.imageLabel.text = arrayOfVehicles [indexPath. row] .vehicleLabel.text' вместо 'cell.imageLabel = ...'? Установка свойства label не будет обновлять иерархию представлений самостоятельно. –

+0

Я сделал это изменение, но получил тот же результат. – Scooter

+0

Отправьте обновленный код. Похоже, что по какой-то причине вы создаете новый ярлык, но затем не передаете его в 'addSubview (: _)'. –

ответ

2

Вы должны обновить существующий ярлык с информацией из модели данных вместо того, чтобы создать новую метку каждый раз, когда:

cell.imageLabel.text = // The text… 
Смежные вопросы