У меня есть 2 раздела в моей коллекции: изображения и альбомы.
У каждого раздела своя логика. При нажатии на альбом - загружаются некоторые фотографии.
Нажав на изображение, я хочу получить доступ к переменной UIView на выходе, но не могу, так как с помощью метода indexSath didSelectItemAt внутри внутреннего класса.
class TwoViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
@IBOutlet var pickedPhotoView: UIView!
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! AlbumCell
<b>// Here is ok. i can access the pickedPhotoView variable</b>
view.addSubview(pickedPhotoView)
}
class ImagesCell: UICollectionViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// but here there is no chance to access pickedPhotoView variable
}
}
Обновление:
class TwoViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, ImagesCellDelegate {
func doSomething(_ sender: ImagesCell) {
print("do something")
}
var imagesCell: ImagesCell = ImagesCell()
override func viewDidLoad() {
super.viewDidLoad()
imagesCell.delegate = self
}
}
protocol ImagesCellDelegate {
func doSomething(_ sender: ImagesCell)
}
class ImagesCell: UICollectionViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
var delegate: ImagesCellDelegate!
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
delegate?.doSomething(self)
}
}
Функция doSomething не выполняется в TwoViewController.
Я думаю, что я делаю что-то не так с:
var imagesCell: ImagesCell = ImagesCell()
imagesCell.delegate = self
Есть идеи?
Thanx!
Решение:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
cell.delegate = self
}