首页 > 解决方案 > 使用 present 创建时,防止 ViewController 在后台堆叠

问题描述

我使用此代码打开一个新的 ViewController:

// Get a random next post
@IBAction func buttonNextPostTapped(_ sender: UIButton) {

    let postNumber = Int.random(in: 0 ..< postIds.count)
    let postId = postIds[postNumber]

    PostApi.shared.getPost(postId: postId) { (post) in
        let storyBoard : UIStoryboard = UIStoryboard(name: "MainApplication", bundle: nil)
        let nextViewController = storyBoard.instantiateViewController(withIdentifier: "PostsViewController") as! PostsViewController
        nextViewController.post = post
        nextViewController.isFromRandom = true
        self.present(nextViewController, animated: true, completion: {})
    }
}

此代码将使用不同的数据打开相同的 ViewController。它可以工作,但是,“旧”视图控制器将在后台堆叠。所以如果我打开 10 个新的 ViewControllers,我在后台有 10 个 VC。

我怎样才能呈现一个新的 ViewController,并关闭“旧”的?

标签: swiftxcodeuiviewcontroller

解决方案


使用setViewControllers函数 fromUINavigationController是最好的方法。

func setViewControllers(_ viewControllers: [UIViewController], animated: Bool)

您可以从堆栈中删除您想要的任何控制器,例如

 if var navigationControllersArray:Array = (self.navigationController?.viewControllers) {
            navigationControllersArray.remove(at: navigationControllersArray.count-2)
            self.navigationController?.viewControllers = navigationControllersArray
        }

推荐阅读