2015-05-22 2 views
1

У меня есть несколько UICollectionViewCells. Когда пользователь нажимает на определенную ячейку, я хочу, чтобы мое приложение изменило фоновое изображение касательной ячейки.Как изменить фоновое изображение используемого UICollectionViewCell?

Мой подход заключается в том, чтобы сосредоточиться на методе didSelectItemAtIndexPath. Когда ячейка коснется, этот метод будет вызван.

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    var cell: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("cellIdentifier", forIndexPath: indexPath) as! UICollectionViewCell 
    cell.backgroundView = UIImageView(image: UIImage(named: "myImage")) 
} 

Однако я не могу заставить его работать, но я не знаю, почему. Вероятно, проблема связана с indexPath, которая не возвращает правильное значение ячейки. Я попытался использовать indexPath.row, и это действительно возвращает номер ячейки Int.

Кроме того, я также создаю новый UICollectionViewCell с var, но эта ячейка уже существует.

Почему эта ячейка не обновляет фоновое изображение? Как изменить фоновое изображение UICollectionViewCell, которое было затронуто пользователем?

+0

Не могли бы вы использовать 'cellForItemAtIndexPath', чтобы получить ячейку, а не переопределить другую? –

+0

'cellForItemAtIndexPath' - это метод, используемый для размещения ячеек внутри' UICollectionView'. Он не вызывается, когда вы выбираете ячейку. – Cesare

+0

Извините, я не понял. Используйте метод cellForItemAtIndexPath как метод для получения ячейки. Не совсем уверен в быстром синтаксисе, но 'collectionView.cellForItemAtIndexPath (indexPath)'. –

ответ

4

Я полностью согласен с ответом Джоша, но если вы измените фоновое изображение, используя метод didSelectItemAtIndexPath, он отлично работает. Затем вы можете использовать cellForRowAtIndexPath метод, который возвращает UITableViewCell на указанный indexPath, как следующим образом:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {   
    var cell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell! 
    cell.backgroundView = UIImageView(image: UIImage(named: "photo2"))   
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell 
    cell.backgroundView = UIImageView(image: UIImage(named: "photo1")) 
    cell.selectionStyle = .None 
    return cell 
} 

Я просто поставил selectionStyle на .None, чтобы избежать выделения. Надеюсь, это поможет вам.

+0

Спасибо, Виктор. Я не использую 'UITableView', а' UICollectionView'. Вы можете заменить 'tableView' на' collectionView'. Кроме того, свойство 'selectionStyle' работает в' UICollectionViews'? – Cesare

+0

@JoshGafni Да, вы правы, но я не отвечаю ни на кого из вас, и вопрос не касался многоразовой ячейки или чего-то еще, я отвечаю только на конкретный случай. –

+0

См. Первое предложение моего ответа –

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