О приложении (UICollectionView в UICollectionView):
- TabBarController - корневой контроллер окна приложения
- TabBarController содержит 3 контроллера навигации.
- 1-й навигационный контроллер имеет
HomeViewController
в качестве корневого контроллера
HomeViewController
содержит CategoryCollectionView
- Внутри каждой ячейки
CategoryCollectionView
присутствует один ItemCollectionView
- Каждый
ItemCollectionView
содержит множество ItemCell
Цель : когда пользователь нажимает ItemCell
, приложение должно перейти к другому контроллеру представления, ItemViewController. Я разрабатываю это приложение полностью с использованием кода. Так что я хочу сделать это без Storyboard Segues или IB. Я до сих пор не смог понять это. Если бы вы могли указать мне правильное направление, это было бы здорово. Спасибо.
Я попробовал следующее, но они не сработали:
Первый метод : доступ к корневому контроллеру окна из ячейки CategoryCollectionView
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let currentNavCon = self.window?.rootViewController!.navigationController
currentNavCon?.pushViewController(ItemViewController(), animated: true)
}
Второй метод : я определил функцию itemCellClicked
в HomeViewController
и вызвал ее из didSelectItemAt
ячейки CategoryCollectionView
.
func itemCellClicked(_ sender: CatalogViewCategoryCell, _ position: Int) {
let itemViewController = ItemViewController()
navigationController?.pushViewController(itemViewController, animated: true)
}
А внутри клетки:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
HomeViewController().itemCellClicked(self, indexPath.item)
}