Мое приложение имеет 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!)
}
вы имели в виду использовать 'cell.imageLabel.text = arrayOfVehicles [indexPath. row] .vehicleLabel.text' вместо 'cell.imageLabel = ...'? Установка свойства label не будет обновлять иерархию представлений самостоятельно. –
Я сделал это изменение, но получил тот же результат. – Scooter
Отправьте обновленный код. Похоже, что по какой-то причине вы создаете новый ярлык, но затем не передаете его в 'addSubview (: _)'. –