2015-03-12 3 views
0

Я пытаюсь передать информацию из ячейки просмотра коллекции в другой контроллер представления, а затем убрать контроллер представления. Я пытаюсь сделать это с делегацией, как я думаю, что это единственный путь, до сих пор я настроил свой протокол таким образом:Использование протокола и делегирования в SWIFT

@objc protocol CollectionViewImageDelegate { 
    optional func selectedCell(row: NSIndexPath, data: UIImage) 
} 

Я добавил свойство:

var delegate : CollectionViewImageDelegate? 

и затем назвал его в didSelectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

     let imageData = self.sources[indexPath.row] 
     self.delegate?.selectedCell?(indexPath, data: imageData) 

     self.dismissViewControllerAnimated(true, completion: nil) 
} 

Тогда как я называю его другим View Controller до сих пор я сделал:

class ProfileViewController: UIViewController, CollectionViewImageDelegate { 

var colViewImage : CollectionViewVC 

в представлении сделал груз:

colViewImage.delegate = self 

и это, но ничего не происходит:

func selectedCell(row: NSIndexPath, data: UIImage) { 
    println(data) //Nothing prints 
} 

Ничто не печатает я не знаю, почему? Я новичок в протоколе и делегатах и ​​т. Д. И не могу понять, почему он не передает изображение?

Благодаря

+0

Является ли 'образ' фактическим классом (а не экземпляром), который вы определили? Может быть, вы хотите использовать 'UIImage' вместо' image' в вашем протоколе? –

+0

Да, спасибо, что это было, новый я был близок. Хотя я, как теперь передать эту дату, выбранную для моего другого контроллера представлений, я немного изменил свой вопрос и добавил к нему. –

+0

Есть ли шанс, что это не сработает, потому что я отклоняю контроллер View вместо segue? –

ответ

0

Ваш CollectionViewController называет этот метод selectedCell но вы не связаны делегат еще.

Сделайте свой другой ViewController соответствующим collectionViewImageDelegate (который условно должен быть записан с помощью капитала C) и реализовать ваш метод selectedCell в нем.

Установите ViewController в качестве делегата CollectionViewController.

Кроме того, смените self.delegate?.selectedCell!(indexPath, data: imageData) на self.delegate?.selectedCell?(indexPath, data: imageData), чтобы вызвать необязательный метод selectedCell, только если он был реализован делегатом.

+0

Спасибо, хотя это точно тот бит, с которым я изо всех сил стараюсь, поскольку я не знаю, как это сделать. Я установил ссылку на другой VC следующим образом: var VC2 = ViewController2(). и что потом? Я попытался сделать VC2.delegate = self в моем представленииDidLoad, но опция не появилась? Я не могу понять это –

+0

Вам нужно предоставить дополнительную информацию. Это также поможет, если вы назовете ваши классы более описательно в зависимости от их цели. ViewController2 действительно не говорит вам, что он делает. Что-то вроде ImagePickerCollectionViewController было бы лучше. – Juul

+0

Я изменил свой код так, как он есть. ViewController 2 Я переписывал контроллер коллекцииView. Я пытаюсь передать информацию из ViewController. 1 –

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