Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 更换ViewController_Xcode_Swift_Uiviewcontroller - Fatal编程技术网

Xcode 更换ViewController

Xcode 更换ViewController,xcode,swift,uiviewcontroller,Xcode,Swift,Uiviewcontroller,我想在两个视图控制器之间切换。这两个视图控制器都继承自CenterViewController。下面的代码是将一个ViewController(CertificateEnviewController)添加到堆栈: centerViewController = CertificatenViewController(nibName: "CertificatenViewController", bundle: nil) centerViewController.delegate = self

我想在两个视图控制器之间切换。这两个视图控制器都继承自CenterViewController。下面的代码是将一个ViewController(CertificateEnviewController)添加到堆栈:

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

    }
我不知道到底是什么问题,但似乎视图没有重新加载。我尝试了popViewControllerAnimated,但这不起作用。也许你能帮我解决这个问题

解决方案:

    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)
这是典型的。这将使当前视图控制器显示导航控制器(通常位于其顶部)。然后导航控制器将显示您在其内部设置的根目录(因此centerViewController)

当您想要摆脱它时,可以对执行显示的视图控制器实例调用
dismissViewControllerAnimated:completion:
。它将解除导航控制器(不要在导航控制器上调用Disclose)

稍后,如果要替换,请执行以下操作:

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

两个视图控制器之间的更改是什么意思?如果您打算推送或以模式呈现下一个视图控制器,那么您所做的是不正确的。下面的答案显示了如何显示视图控制器。
    centerNavigationController.setViewControllers([centerViewController], animated: true)