У меня есть tabBar с вкладкой, которая содержит NavVC, у которого есть корень как ParentVC. ParentVC имеет сегментированный контроль, который управляет двумя дочерними виртуальными контроллерами, RedVC и BlueVC. И RedVC, и BlueVC содержат кнопку для нажатия на YellowVC.
Проблема заключается в том, что YellowVC включается, и в его viewDidLoad я проверяю, чтобы увидеть контроллеры представления в стеке, и появляются два контроллера - ParentVC и YellowVC, нет упоминания ни о RedVC (если он нажимает на него) или BlueVC (если он нажимает на него).
for controller in navigationController!.viewControllers {
print(controller.description) // will only print ParentVC and YellowVC
}
Я понимаю, что поскольку tabBar имеет navVC в качестве вкладки, а его корень - это ParentVC, то это корень push, но мне нужно знать, какой из RedVC или BlueVC вызвал его, когда YellowVC выдвигается ,
Я могу использовать некоторые свойства класса в YellowVC, но я хочу посмотреть, есть ли другой способ с помощью navigationController:
var pushedFromRedVC = false // I'd prefer not to use these if I don't have to
var pushedFromBlueVC = false
Как получить ссылку на RedVC или BlueVC, когда кто-либо из них нажмет на YellowVC?
class MyTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let parentVC = ParentVC()
let navVC = UINavigationController(rootViewController: parentVC)
navVC.tabBarItem = UITabBarItem(title: "Parent", image: nil), tag: 0)
viewControllers = [navVC]
}
}
class ParentVC: UIViewController {
var segmentedControl: UISegmentedControl! // switching segments will show either the redVC or the blueVC
let redVC = RedController()
let blueVC = BlueController()
override func viewDidLoad() {
super.viewDidLoad()
addChildViewController(redVC)
view.addSubview(redVC.view)
redVC.didMove(toParentViewController: self)
addChildViewController(blueVC)
view.addSubview(blueVC.view)
blueVC.didMove(toParentViewController: self)
}
}
class RedVC: UIViewController {
@IBAction func pushYellowVC(sender: UIButton) {
let yellowVC = YellowVC()
yellowVC.pushedFromRedVC = true // I'd rather not rely on this
navigationController?.pushViewController(yellowVC, animated: true)
}
}
class BlueVC: UIViewController {
@IBAction func pushYellowVC(sender: UIButton) {
let yellowVC = YellowVC()
yellowVC.pushedFromBlueVC = true // I'd rather not rely on this
navigationController?.pushViewController(yellowVC, animated: true)
}
}
class YellowVC: UIViewController {
var pushedFromRedVC = false // only sample, I'd rather not use these if I don't have to
var pushedFromBlueVC = false
override func viewDidLoad() {
super.viewDidLoad()
for controller in navigationController!.viewControllers {
// even though the push is triggered from either the RedVC or BlueVC it will only print ParentVC and YellowVC
print(controller.description)
}
}
}