如何以编程方式弹出视图控制器并显示一个新的

时间:2018-09-14 14:21:22

标签: ios uiviewcontroller uinavigationcontroller

我想做的是呈现一个viewController,当用户触摸一个按钮时,我想调用popViewController,然后呈现一个不同的viewController。但是我不知道该怎么做。

我尝试过的一些事情是调用pop,然后立即调用present,在延迟后调用present,用完成块填充pop,然后在完成块中调用present,以及其他想法。

我认为我已经使整个事情复杂化了,我相信他们应该是一种简单的方法。

谢谢您的帮助。

澄清:

我做到这一点:

        if let vc = UIStoryboard(name: "Listing", bundle: nil).instantiateInitialViewController() as? ListingViewController
    {
        vc.listing = listing
        vc.editListing = forEdit
        vc.title = " "
        self.navigationController?.pushViewController(vc, animated: true)
    }

在用户触摸按钮时从该VC中执行以下操作:

self.navigationController?.popViewController(animated: true)

当VC消失时,我想做这样的事情:

        if let vc = UIStoryboard(name: "CreateListing", bundle: nil).instantiateInitialViewController() as? NewCreateListingViewController
    {
        vc.bMakeSimiliar = makeSimiliar
        vc.listing = listing
        vc.editListing = editListing
        vc.title = " "
        self.navigationController?.pushViewController(vc, animated: true)
    }

基本上,我的用户正在查看第一个控制器,即列表,他从列表VC触摸按钮以添加新列表,因此我想关闭列表视图控制器,并向他展示创建列表视图控制器。 / p>

当我执行上述代码以展示新的VC时,什么也没有发生。我在popViewController之后立即执行此操作。

1 个答案:

答案 0 :(得分:1)

您不使用pop在堆栈中显示 next 控制器。 Pop实际上是从当前控制器向后导航的。

要执行您要实现的目标,您需要调用navigationController.pushViewController(viewController: UIViewController, animated: Bool)方法。

为了回到以前的视图控制器,您可以使用: navigationController.popViewController(animated: Bool)

要使用根视图控制器,请使用: navigationController.popToRootViewController(animated: Bool)

要使用堆栈中的某些特定视图控制器,请使用: popToViewController(viewController: UIViewController, animated: Bool)