У меня UICollectionView настроен в отдельном файле swift, который отображается на HomeViewController. Я хочу нажать DetailViewController, когда ячейка представления коллекции выбрана. Я хочу сделать это программно, без раскадровок. Я всегда выдвигал ViewControllers с помощью «navigationController.pushViewController (vc, animated: true)», но я не могу получить доступ к navigationController из функции «didSelectItemAt» UICollectionView. Если это имеет значение, у меня есть пользовательский UICollectionViewCell, настроенный и используемый для ячеек.
Как я могу заставить эту работу? CollectionView отображается правильно, и когда я выбираю ячейку, я знаю, что didSelectItemAt запускается, поскольку мое выражение печати «Выбрал элемент в ...» отображается в консоли.
После нескольких часов поисков я не могу этого понять. Я все еще изучаю структуру MVC, поэтому у меня может быть фундаментальный недостаток в том, как все настроено. Я также видел, что мне может понадобиться создать собственный делегат, чтобы справиться с этим, но я чувствую, что мне не хватает чего-то более простого, так как функция didSelectItemAt прямо здесь.
Вот соответствующий код из моего файла Swift UICollectionView:
class HomeDataController: NSObject, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("Did select item at...")
// this is where I am trying to push the DetailViewController
}
}
Вот мой HomeViewController:
class HomeViewController: UIViewController {
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.minimumLineSpacing = 30
layout.sectionInset.top = 20
layout.sectionInset.bottom = 20
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.translatesAutoresizingMaskIntoConstraints = false
cv.backgroundColor = UIColor(named: "background")
cv.register(HomeCustomCell.self, forCellWithReuseIdentifier: "homeCell")
return cv
}()
let dataController: HomeDataController = {
let dataController = HomeDataController()
return dataController
}()
override func viewDidLoad() {
super.viewDidLoad()
collectionView.dataSource = self.dataController
collectionView.delegate = self.dataController
view.addSubview(collectionView)
}
}