Переход от одного NSViewController к другому NSViewController - PullRequest
0 голосов
/ 22 января 2019

Я совершенно новичок в разработке приложений для Mac. Я столкнулся с проблемой с последних двух дней, но не смог добиться успеха. Моя проблема такая же, как вопрос Переключение между двумя различными NSViewControllers с данными .

Не могли бы вы помочь мне понять процесс и синтаксис перехода от одного NSViewController к другому.

У меня есть контроллер View для входа в систему, где у меня есть два поля: UserId и password. При нажатии кнопки входа в систему веб-API вызывается для аутентификации пользователя, и после получения "SUCCESS" в качестве ответа управление должно быть передано с LoginViewController на ProfileViewController.

Я пытался решить эту проблему в соответствии с ответом на вопрос (указана ссылка), но я получаю сообщение об ошибке. "fromviewcontroller.view.superview не может быть nil."

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Создайте переход из 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
    }

}
0 голосов
/ 22 января 2019

Вы должны создать 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, вам нужнопереопределить его.

Пример для передачи данных между ViewControllers:

    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
        }
    }
...