我想在两个视图控制器之间切换。两个viewcontrollers都继承自centerviewcontroller。下面的代码将向堆栈添加一个viewcontroller(certificatenviewcontroller):

centerViewController = CertificatenViewController(nibName: "CertificatenViewController", bundle: nil)
    centerViewController.delegate = self
centerNavigationController = UINavigationController(rootViewController: centerViewController)
    view.addSubview(centerNavigationController.view)
    addChildViewController(centerNavigationController)

    centerNavigationController.didMoveToParentViewController(self)

这发生在viewdidload中,在同一个类中,我有一个switch语句来检查必须加载哪个视图,如下所示:
        switch menuItem.getNibname() {
    case "CertificatenViewController":
        print(menuItem.getNibname())

        centerViewController = CertificatenViewController(nibName: menuItem.getNibname(), bundle: nil)
        centerViewController.delegate = self

    case "SettingsViewController":
        print(menuItem.getNibname())

        centerViewController = SettingsViewController(nibName: menuItem.getNibname(), bundle: nil)
        centerViewController.delegate = self

    default: break

    }

我不知道具体的问题是什么,但似乎视图没有重新加载。我试过PopViewControllerImated,但这不起作用。也许你能帮我解决这个问题。
解决方案:
    func changeView(menuItem: MenuItem){

    self.centerNavigationController.viewControllers.removeAll()


    switch menuItem.getNibname() {
    case "CertificatenViewController":
        print(menuItem.getNibname())

        self.centerNavigationController.pushViewController(self.centerViewController, animated: false)

    case "SettingsViewController":
        print(menuItem.getNibname())

        self.centerNavigationController.pushViewController(self.settingsViewController, animated: false)

    case "MessagesViewController":
        print(menuItem.getNibname())

        self.centerNavigationController.pushViewController(self.messagesViewController, animated: false)

    default: break

    }

}

最佳答案

通常,这不是显示视图控制器的方法:

view.addSubview(centerNavigationController.view)
addChildViewController(centerNavigationController)

centerNavigationController.didMoveToParentViewController(self)

只需删除代码。
我不知道你到底想干什么,但是
self.presentViewController(centerNavigationController, animated: true, complettion: nil)

是典型的。这使得当前视图控制器显示导航控制器(通常仅在其自身的顶部)。然后nav控制器将显示您在其内部设置的根(即centerviewcontroller)。
当你想摆脱它时,你可以在进行演示的视图控制器实例上调用dismissViewControllerAnimated:completion:。它将关闭导航控制器(不要在导航控制器上调用dismise)
稍后,当您要替换时,执行以下操作:
    centerViewController = CertificatenViewController(nibName: menuItem.getNibname(), bundle: nil)
    centerViewController.delegate = self

添加:
    centerNavigationController.setViewControllers([centerViewController], animated: true)

关于xcode - 替换ViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38205434/

10-10 21:08
查看更多