Свифт: Как убедиться, что бесконечные ViewController не накладываются друг на друга (как отменить их при необходимости)?
Я создаю простое приложение с тремя ViewController в конструкторе интерфейсов. Прямо сейчас они представлены в следующем порядке:
FirstVC> SecondVC> ThirdVC
- FirstVC
Показывает главное меню, кнопка воспроизведения подключена через конструктор интерфейса для показа SecondVC (сейчас нет кода).
- SecondVC
Простая игра. Когда игра заканчивается, я представляю ThirdVC программно.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "GameOverScreen") as UIViewController
vc.modalPresentationStyle = UIModalPresentationStyle.currentContext
vc.modalTransitionStyle = .crossDissolve
self.present(vc, animated: true, completion: nil)
До (или во время) представления ThirdVC я хочу отклонить SecondVC, чтобы только в иерархии:
FirstVC> ThirdVC
настоящее.
- ThirdVC
Показывает простую игру поверх сообщения.
dismiss(animated: true, completion: nil)
Когда я отклоняю этот контроллер представления, я хочу вернуться к FirstVC или, скорее, потому что SecondVC уже удален, игрок автоматически возвращается на FirstVC.
Как я могу это сделать? Конечно, я знаю, как программно представлять и отклонять VC, но как я могу одновременно отменить VC, представляя новый VC? Или как правильно сделать это?
1 ответ
Вам лучше использовать navigationcontroller, а когда нажимается ThirdVC, делайте это в его viewDidLoad
func optimizeNavigation()
{
let viewControllers: [UIViewController] = self.navigationController!.viewControllers ;
print("before optimize \(viewControllers.count)")
for aViewController in viewControllers
{
if(aViewController is SecondVC)
{
aViewController.removeFromParentViewController()
}
}
let viewControllers2: [UIViewController] = self.navigationController!.viewControllers ;
print("after optimize \(viewControllers2.count)")
}
Таким образом, когда вы заходите в ThirdVC, вы возвращаетесь в FirstVC.