【发布时间】:2023-03-25 03:13:01
【问题描述】:
我有一个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 导航堆栈中?我怀疑它与我的 HomeViewContainer 类中的 add() 方法有关,但我不知道采取什么合适的解决方案。
【问题讨论】:
标签: swift uicollectionview uinavigationcontroller