Я пытаюсь создать segue, который работает вот так. Когда я коснусь первой ячейки в моем первом контроллере представления, я перейду ко второму контроллеру представления и отображу первую ячейку моего вида коллекции во втором контроллере представления. И когда я нажимаю вторую ячейку в контроллере первого представления, я перехожу к контроллеру второго представления и отображу вторую ячейку моего просмотра коллекции во втором контроллере представления. Я зашел так далеко, но это не сработало.Пытается создать segue между 2 ячейками коллекцииView из разных viewController
ПЕРВЫЙ ВЗГЛЯД CONTROLLER
var selectedIndexPath: NSIndexPath!
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
selectedIndexPath = indexPath as NSIndexPath
performSegue(withIdentifier: "mySegue", sender: self)
print (selectedIndexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue"
{
let secondVC = segue.destination as! ViewController2
secondVC.initialDisplayCellIndexPath = selectedIndexPath
}
}
ВТОРОЙ ВИД CONTROLLER
var initialDisplayCellIndexPath: NSIndexPath!
override func viewWillAppear(_ animated: Bool) {
self.collectionView.layoutIfNeeded()
self.collectionView.scrollToItem(at: initialDisplayCellIndexPath as IndexPath, at: UICollectionViewScrollPosition.centeredHorizontally, animated: true)
}
Когда я запускаю мое приложение он выходит из строя, как только я нажмите один из элементов. Это сообщение об ошибке:
<NSIndexPath: 0x600000227200> {length = 2, path = 0 - 1}
fatal error: unexpectedly found nil while unwrapping an Optional value
И ошибка в этой строке:
self.collectionView.scrollToItem(at: initialDisplayCellIndexPath as IndexPath, at: UICollectionViewScrollPosition.centeredHorizontally, animated: true)
И является начальнымDisplayCellIndexPath nil, когда вы рухнули? –
Сделайте то, что я предлагаю. Преобразуйте initialDisplayCellIndexPath из типа 'NSIndexPath!' В 'NSIndexPath? '(От« неявно развернутого необязательного »до« нормального »необязательного. Затем добавьте опцию« if let », необязательную цепочку или инструкцию охраны, чтобы проверить значение nil, когда ваш метод' viewWillAppear' . называется –
Ok я изменил его, как этот 'переопределение FUNC viewWillAppear (_ анимированный: Bool) { если initialDisplayCellIndexPath = ноль { self.collectionView.layoutIfNeeded() self.collectionView.scrollToItem (по адресу:! initialDisplayCellIndexPath как IndexPath, в : UICollectionViewScrollPosition.centeredHorizontally, animated: true) } else { } 'Теперь мое приложение не сработает. 2-й контроллер просмотра появляется, когда я нажимаю любую из ячеек, но collectionview на втором контроллере просмотра не прокручивает –