从一个NSViewController移到另一个NSViewController

时间:2019-01-22 09:37:57

标签: swift macos nsviewcontroller

我对Mac应用程序开发完全陌生。自最近两天以来,我一直面临一个问题,但未能成功。 我的问题与问题Swiching between 2 diferent NSViewControllers with data相同。

请帮助我了解如何从一个NSViewController迁移到另一个UserId的过程和语法。

我有一个用于登录的View控制器,其中有两个字段,即password"SUCCESS"。 单击登录按钮后,将调用Web API来对用户进行身份验证,并在收到LoginViewController作为响应后,应将控制权从ProfileViewController转移到400

我已尝试按照问题的答案(给出的链接)重现此问题,但出现错误。 “ fromviewcontroller.view.superview不能为零。”

2 个答案:

答案 0 :(得分:0)

从LoginViewController到ProfileViewController创建一个序列,并为其提供一个标识符,例如“ showProfile”。

@IBAction func loginButton(_ sender: Any) {

    // Code for validating User.

    if response == "SUCCESS" {
        performSegue(withIdentifier: "showProfile", sender: sender)
    }
}

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)
    if segue.identifier == "showProfile" {
        let profileController = segue.destinationController as! ProfileViewController
        profileController.data = responseData
    }
}

不使用情节提要吗?

@IBAction func loginButton(_ sender: Any) {

    // Code for validating User.

    if response == "SUCCESS" {
        let profileController = ProfileViewController(nibName: "ProfileViewController", bundle: Bundle.main)
        profileController.data = responseData
        self.view.window!.contentViewController = profileController
    }

}

答案 1 :(得分:-1)

您必须在情节提要中创建一个Segue(Ctrl +左键单击LoginViewController上方的黄色圆圈按钮并将其拖动到ProfileViewController),然后将其命名为“ showProfile”。

收到“成功”后,您要致电:

    //here you enter the name of the segue you want to call 
    //& in sender the data you want to pass to the new VC.
    performSegue(withIdentifier: "showProfile", sender: nil) 

这将呼叫

    prepare(for segue: UIStoryboardSegue, sender: Any?) 

在当前的ViewController中,因此,如果要将数据传递到新的ViewController,则需要覆盖它。

在ViewController之间传递数据的示例:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        //asking which segue is called
        if segue.identifier == "showProfile" {  

            //when you called "showProfile", you can be sure that your
            //destination is a ProfileViewController
            let vc = segue.destination as! ProfileViewController 

            //passing the data to your new VC
            vc.data = sender
        }
    }