【发布时间】:2019-06-01 11:19:58
【问题描述】:
我有以下情况。嵌入在导航控制器中的视图控制器。
这个视图控制器有一个按钮,它实例化一个标签栏控制器,然后显示它的一个视图控制器。
当我关闭标签栏控制器提供的控制器时,我总是在初始视图控制器中结束,在它的同一个实例中。
我尝试的是:
func showHomeScreen() {
//trying to dismiss the current view controller ( will move this code out of this method once i figure out how to do it
self.navigationController?.popViewController(animated: true)
self.dismiss(animated: true, completion: nil)
//showing the next view controller
let tabBarController = storyboard?.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
tabBarController.selectedViewController = tabBarController.viewControllers?[1]
present(tabBarController, animated: true, completion: nil)
}
self.navigationController?.popViewController => returns nil
self.dismiss(animated: true, completion: nil) 似乎什么也没做。
谁能告诉我如何解决这个问题,我想它非常简单,但我找不到答案。
编辑:这就是我的故事板的外观:
【问题讨论】:
-
太可怕了!我不明白,你想达到什么目的?一次多个操作,一个块。
-
@Mannopson 你到底有什么不明白的?我正在尝试关闭当前视图控制器,然后在当前视图控制器被关闭后移至下一个。前两行代码是我试图像我说的那样关闭当前的代码,但这不起作用,我在问我应该如何关闭它。
-
如果是这样,您应该尝试类似:
dismiss(animated: true, completion: { // do the rest of operations... })。这是给你的提示!在你的情况下,我发现了两个问题。 1.解雇vc。 2. 呈现 vc。所以,你被解雇的 vc 应该提供一个tabBarController? -
@bsod 有一个名为 LogInViewController 的视图控制器。此视图控制器嵌入在导航控制器中。这个视图控制器上有多个按钮,其中一个是登录按钮。当我按下登录按钮时,会进行网络调用,如果该调用成功,则调用 showHomeScreen() 方法。我现在想要实现的是:关闭 LogInViewController,然后导航到选项卡栏控制器之一。
-
如果标签栏控制器是视图层次结构的支柱(通常是),那么为什么不将它设为根视图控制器呢?对你刚才所说的一切都是肯定的,除了一个警告。你不能从
viewDidLoad展示视图控制器,因为视图仍在构建中。视图控制器必须具有完全构造的视图才能呈现。但是,由于这是在应用启动时,您可以在viewDidAppear上显示不带动画的视图控制器,并将其隐藏在扩展的启动屏幕后面。
标签: swift uinavigationcontroller