我对Mac应用程序开发完全陌生。自最近两天以来,我一直面临一个问题,但未能成功。 我的问题与问题Swiching between 2 diferent NSViewControllers with data相同。
请帮助我了解如何从一个NSViewController
迁移到另一个UserId
的过程和语法。
我有一个用于登录的View控制器,其中有两个字段,即password
和"SUCCESS"
。
单击登录按钮后,将调用Web API来对用户进行身份验证,并在收到LoginViewController
作为响应后,应将控制权从ProfileViewController
转移到400
。
我已尝试按照问题的答案(给出的链接)重现此问题,但出现错误。 “ fromviewcontroller.view.superview不能为零。”
答案 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
}
}