2015-11-26 6 views
0

Прежде всего: я знаю, что есть тысячи вопросов по этому вопросу и, конечно же, в одном из них на мой вопрос ответили. Но после нескольких часов поиска я не нашел ответа, который решает мою проблему ...swift imageView, collectionView, неожиданно нашел нуль при разворачивании необязательного значения

У меня есть CollectionViewController (внутри контейнера) и CollectionViewCell. Внутри ячейки есть изображение. Изображение imageView должно быть изменено с помощью кнопки в CollectionViewController.

Вот мой код:

class essenCell: UICollectionViewCell { 
@IBOutlet weak var Bild: UIImageView! 
} 

(Клетка)

class essenCollectionViewController: UICollectionViewController { 
[...] 
@IBAction func xyz(sender: UIButton!) { 
//following: the line with the error (unexpectedly found nil while unwrapping an Optional value) 
essenCell().Bild.image = UIImage(named: "erster") 
} 
} 

(CollectionViewController)

Сначала я думал, что я совместно uld подключить кнопку к ячейке и контроллер, это работает теоретически, но не работает в моем конкретном случае. Изменение изображения происходит внутри if-Loop (внутри моего контроллера), который относится к parentViewController. Поскольку я не могу использовать эту ссылку внутри Ячейки, мне нужно, чтобы кнопка-функция находилась в контроллере.

Пожалуйста, помогите мне!

ответ

0

Все настройки для collectionViewCell должны быть выполнены в cellForItemAtIndexPath.

var buttonPressed = false 

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("reuseCell", forIndexPath: indexPath) as! essenCell 

    if buttonPressed { 
     cell.Bild.image = UIImage(named: "erster") 
    } else { 
     cell.Bild.image = UIImage(named: "placeHolder") 

    return cell 
} 

@IBAction func xyz(sender: UIButton!) { 
    buttonPressed = true 
    collectionView?.reloadData() 
} 
+0

Это сработало очень хорошо, спасибо. Но можно ли использовать '' reloadData() "' часть из 'parentViewController'? Я уже пробовал 'essenViewController(). CollectionView? .reloadData()', но это не работает. Я получаю сообщение об ошибке «_uicollectionview должен быть инициализирован с параметром макета не-nil swift_» –

+0

Используйте уведомление «NSNotificationCenter» для отправки сигнала в 'collectionViewController'. Это самый простой способ отправки сигналов между VCs IMO. – Tim

+0

Большое спасибо. Это сработало! –

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