У меня есть HomeViewcontroller
, где у меня есть сегментированный контроллер, который переключается между тремя UICollectionViews
в контейнере.
HomeViewContainer является корнем моего контроллера навигации
class HomeViewContainer: UIViewController {
let displayOptionSegmentedControl: UISegmentedControl = {
let segmentedControl = UISegmentedControl(items: ["Businesses","List","Map"])
segmentedControl.setupBasicControllerColors()
return segmentedControl
}()
let businessCollectionViewController = BusinessCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout())
let couponCollectionViewController = CouponCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout())
var currentSegmentIndex = 0
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.mainWhite()
setupHeaderView()
add(asChildViewController: businessCollectionViewController)
}
fileprivate func add(asChildViewController viewController: UIViewController) {
contentContainer.addChildViewController(viewController)
contentContainer.view.addSubview(viewController.view)
viewController.view.frame = view.bounds
viewController.didMove(toParentViewController: self)
}
fileprivate func remove(asChildViewController viewController: UIViewController) {
viewController.willMove(toParentViewController: nil)
viewController.view.removeFromSuperview()
viewController.removeFromParentViewController()
}
@objc func segmentedValueChanged(_ sender: UISegmentedControl) {
if currentSegmentIndex != sender.selectedSegmentIndex {
switch currentSegmentIndex {
case 0:
remove(asChildViewController: businessCollectionViewController)
case 1, 2:
remove(asChildViewController: couponCollectionViewController)
default:
break
}
//Add new view based on user chosen option.
switch sender.selectedSegmentIndex {
case 0:
currentSegmentIndex = sender.selectedSegmentIndex
add(asChildViewController: businessCollectionViewController)
case 1:
currentSegmentIndex = sender.selectedSegmentIndex
couponCollectionViewController.toggleMapHeaderOff()
add(asChildViewController: couponCollectionViewController)
case 2:
currentSegmentIndex = sender.selectedSegmentIndex
couponCollectionViewController.toggleMapheaderOn()
add(asChildViewController: couponCollectionViewController)
default:
break
}
}
}
}
Представления отображаются правильно, но проблема возникает, когда я щелкаю ячейку в одном из представлений моей коллекции.
Например, если я щелкаю по ячейке в моем businessCollectionViewController, я пытаюсь представить другой ViewController в моем навигационном контроллере и не могу.
BusinessCollectionViewController
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let bdvc = BusinessDetailViewController(collectionViewLayout: UICollectionViewFlowLayout())
//NOTHING HAPPENS HERE
self.navigationController?.present(bdvc, animated: false, completion: nil)
}
Как сделать так, чтобы содержимое ContentContainer оставалось в пределах стека навигации HomeViewContainer ?Я подозреваю, что это как-то связано с методом add () в моем классе HomeViewContainer , но я не знаю, какое подходящее решение выбрать.