UIKit урок 15 UICollectionView


#1

Добрый день. Подскажите, пожалуйста, в чем моя ошибка. По уроку все получилось, но не могу сделать segue на второй View Controller из ячейки Collection View

Заранее благодарен


#2

Здравствуйте!

Присоединяюсь к вопросу. Пытаюсь делать по аналогии предыдущего урока по UITableView, там для передачи данные с TableView на ViewController используется следующий метод

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ShowDetail" {
            if let indexPath = self.tableView.indexPathForSelectedRow {
                let detailsVC = segue.destination as! DetailVC
                detailsVC.trackTitle = imageNameArray[indexPath.row]
            }
        }
    }

Вопрос в том, как по аналогии передать из CollectionView, т.е. как выбрать конкретный объект - я у CollectionView нашел только indexPathsForSelectedItems - но это походу не то, или неправильно применяю.

Буду благодарен за помощь


#3
 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    }

#4

Это всё конечно очень классно, но этот урок испортил мой день(( … Я 3 раза садился за эту задачу сегодня, потратив суммарно перебором (рандомным программированием) - более часа, и казалось бы это не много, но так и вариантов над которым можно было подумать - там особо и не было.
Первое решение которое я нашел на форуме -

collectionView.indexPathsForSelectedItems.first

Решение рабочее, но только не понятно, откуда мы должны были взять этот .first? Как можно было до этого догадаться? ((
Решение которое я нашел на stackoverflow -

let cell = sender as ! UICollectionViewCell
if let indexPath = self.collectionView.indexPath(for: cell)

выглядит поприятнее…
Но вопрос остается… Что прям все как то сами это решили эту задачу, что никто на форуме этим не интересовался и темы данной нет?
А то мне теперь не дает покоя мысль, что я один тут “недалекий” какой-то(


#5

Действительно, не так просто было разобраться.
Вот полное решение:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ShowDetail" {
        let cell = sender as! UICollectionViewCell
        let indexPath = self.collectionView?.indexPath(for: cell)
        let detailsVC = segue.destination as! DetailVC
        detailsVC.trackTitle = imageNameArray[indexPath!.row]
    }
}