我已经在SceneDelegate中以编程方式设置了一个NavigationController。我的应用程序逻辑要求在某个阶段返回堆栈上的特定ViewController。问题是当我做这件事的时候popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]? ,
我似乎失去了NavigationController的跟踪--即使我没有弹回根控制器,也没有Back按钮可用。
当我在ViewController中时,我的NavigationController的ViewControlers堆栈如下所示:
(lldb) po navigationController?.viewControllers
▿ Optional<Array<UIViewController>>
▿ some : 4 elements
▿ 0 : <Vocabulary.MainViewController: 0x7fbd4570dcd0>
▿ 1 : <Vocabulary.VocabularyViewController: 0x7fbd4566ce80>
▿ 2 : <Vocabulary.LearnViewController: 0x7fbd45532180>
▿ 3 : <Vocabulary.LearnResultViewController: 0x7fbd4569f900>
(lldb) po mainNavigationController.viewControllers
▿ 4 elements
▿ 0 : <Vocabulary.MainViewController: 0x7fbd4570dcd0>
▿ 1 : <Vocabulary.VocabularyViewController: 0x7fbd4566ce80>
▿ 2 : <Vocabulary.LearnViewController: 0x7fbd45532180>
▿ 3 : <Vocabulary.LearnResultViewController: 0x7fbd4569f900>
我现在突然回到navigationController.viewControllers[1]
在LearnResultViewController
里面 就像这样:
override func willMove(toParent parent: UIViewController?) {
if let _ = mainNavigationController.topViewController?.isKind(of: LearnResultViewController.self) {
if isPresenting {
if let vocabularyViewController = mainNavigationController.viewControllers.first(where: { $0 is VocabularyViewController} ) {
mainNavigationController.popToViewController(vocabularyViewController, animated: true)
//navigationController?.popToViewController(vocabularyViewController, animated: true) //same behavior
}
}
}
}
isPresenting
只是我插的旗子LearnViewController在……里面viewDidLoad致因willMove在输入时调用LearnViewController很明显我只想在离开的时候mainNavigationController现在是一个全局变量(主要是因为我认为它应该是全局的,这样它就可以从任何地方引用,到目前为止都没有帮助.)。
当我按后退按钮时,我可以回到VocabularyViewController,但是我已经没有后退按钮了--所以我的NavigationController的堆栈似乎丢失了。
还在里面willMove我看得出来LearnResultViewController.navigationController成nil-这导致了我的问题.上述mainNavigationController到那时还拥有州,但是“本地”navigationController becomes零:
(lldb) po mainNavigationController.viewControllers
▿ 2 elements
▿ 0 : <Vocabulary.MainViewController: 0x7fbd4570dcd0>
▿ 1 : <Vocabulary.VocabularyViewController: 0x7fbd4566ce80>
(lldb) po navigationController?.viewControllers
nil
(lldb) po navigationController
nil
在将堆栈/状态保留在NavigationController中时,我能做些什么才能回到所需的ViewController呢?还有别的办法吗?
坦率地说,我甚至不明白为什么场景的导航控制器被设置为零。
斯威夫特4.0
for controller in self.navigationController!.viewControllers as Array {
if controller.isKind(of: DashboardVC.self) {
_ = self.navigationController!.popToViewController(controller, animated: true)
break
}
}
斯威夫特3
let viewControllers: [UIViewController] = self.navigationController!.viewControllers
for aViewController in viewControllers {
if aViewController is YourViewController {
self.navigationController!.popToViewController(aViewController, animated: true)
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。