Альбомы с вложенными фотографиями

nsscrollview
uicollectionviewcell
uicollectionview
segue
swift

#1

У меня есть два контроллера, первый это collectionViewController (в котором я отображаю альбомы) второй это обычный viewController в который встроен scrollView (в котором я хочу отображать листание фотографий из разных альбомов из collectionViewController).
Например я имею два альбома в collectionViewController:

  • Первый альбом имеет 5 фотографий
  • Второй альбом имеет 10 фотографий
    Как сделать так, чтобы на collectionViewController отображалась картина самого альбома, а при клике на ячейку collectionViewController’a, я попадал на viewController и там отображалось то кол-во фотографий сколько имеет альбом для листания в scrollView.
    Может быть у кого есть прямой пример.
    Буду признателен за помощь.

#2

Я вам сейчас постараюсь объяснить.
Вам нужно для начала иметь структуру или класс (прочитайте про отличия чтоб знать что выбрать) Album, в котором должны быть, суд по вашему запросу такие роля как:

       let titleImage: UIImage
       var photos: [UIImage]

Так вот теперь все ваши альбомы нужно собрать в массив

       var albums: [Album]

На основе этого массива вы и строите свою колекшенВью, а в Ее ячейке в качестве изображения используете свойство titleImage нужного елемента массива alboms

А при переходе между контроллерами передавайте не отдельно фото, а весь выбраный объект Album, ну и там вы сможете вывести все фото используя свойство photos


Передаем нужные данные из TableView
#3

Спасибо, буду пробовать.


#4

Все получилось, спасибо за совет))


#5

Другой вопрос возник, если у меня три контроллера, как мне этот массив передать на третий контроллер пройдя через второй? (Или может подгрузить этот массив во втором, но пока не могу сообразить как).
На втором контроллере должна отобразиться та же заглавная картинка что и на первом контроллере и вот на третьем отобразиться вложенный массив.


#6

Все точно так-же:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segueName" {
        let destVC = segue.destination as! SecondViewController
        destVC.album = albums[1]
    }
}

#7

Я опять за помощью, как бы не хотел просить ее((
Одно изображение используя тейблВью я смог перекидывать между тремя котроллерами. Но если у меня в первом контроллере колекшеВью встроен в тейблВью. Картинки хранятся в колекшнВью, а тейблВью служит для создания таблицы чтобы в каждой ячейке хранилось разное количество изображений для горизонтального скролла.
Соответственно мне надо передать из первой табличной ячейки два изображения (которые храняться в колешкнВью) и увидеть эти два изображения на втором контроллере (который колекшнВью) ну и далее уже при нажатии на определенную ячейку увидеть массив изображений (который хранится в каждой из картинок) на третьем контроллере.
На данный момент у меня получается передать только одно изображение, не могу разобрать как передать оба.

Передаю с первого контроллера их таким образом:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segue1" {
        if let indexPaths = self.tableView.indexPathForSelectedRow {
            let indexPath = indexPaths as NSIndexPath
            let dvc = segue.destination as! ViewController2
            dvc.photo = [image[indexPath.row]]
        }
    }
}

Получаю на втором контроллере так (понимаю что у меня и написано что я отображаю одно изображение, но как подгрузить второе не понимаю…):

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    
    return photo.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell2

    cell.imagesView.sd_setImage(with: URL(string: photo[indexPath.item].image))
    
    return cell
}

#8

?[quote=“Dimas, post:7, topic:4285”]
[image[indexPath.row]]
[/quote]

что такое image?

Где хранятся твои фотки которые ты выводишь в коллекшене в таблице?


#9

Это первый контроллер (который колекшнВью внутри тейблВью)

var image: [Model] = []

Второй контроллер куда я передаю фотки (просто колекшнВью)

var photo: [Model] = []

Сам класс (отдельный swift file)

class Model {
    var image: String!
    var image2: String!
    var images: [String] = []
    var images2: [String] = []
    var ref: FIRDatabaseReference!

    init(snapshot: FIRDataSnapshot) {
        ref = snapshot.ref
        let value = snapshot.value as! NSDictionary
        let snap1 = value["hall1"] as? NSDictionary
        let snap2 = value["hall2"] as? NSDictionary
        image = snap1?["qwerty"] as? String ?? ""
        image2 = snap2?["qwerty"] as? String ?? ""
        if let post1 = snap1 as? [String: AnyObject] {
            for (_, value) in post1["images"] as! [String: AnyObject] {
                self.images.append(value as! String)
            }
        }
        if let post1 = snap1 as? [String: AnyObject] {
            for (_, value) in post1["images"] as! [String: AnyObject] {
                self.images2.append(value as! String)
            }
        }
    }
}

Может я не правильно понимаю что-то, но я так понимаю что надо их загрузить массивом на втором контроллере, только понять не могу как загрузить массивом…


#10

Тогда как-то так:

  dvc.photos = [images[indexPath.row]]

#11

Не очень понял, я images не могу передать, т.к. это отдельный файл. Images мне нужен для того чтобы отобразить массив который находится внутри каждого из изображений в третий контроллер из второго.
А с первого контроллера на второй мне надо отобразить те же изображения (а именно image и image2) которые находится в первом контроллере, просто ввиде плитки на втором контроллере.


#12

Я немного отошел от трех контроллеров, решил два использовать, можешь подсказать как передать данные из моей collectionViewCell1 в viewController3? Передать данные я имею ввиду при нажатии на саму ячейку collectionCell используя конкретно ячейку. Что прописать в -

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    ...

Или может какой-то другой спобос реализации использовать чтобы передавать данные конерктно из collectionCell?


#13

Значит так, тебе нужно разобраться с делегатами колекщенВью!давай почитай и отпиши мне сюда какой метод тебе подходит!