IBOutlet nil - 按钮

use*_*097 -2 uibutton uinavigationcontroller iboutlet swift

我有一个 HomeController 和一个 registerController。HomeController 嵌入在导航控制器中,是根视图控制器。如果我在 HomeController 的 ViewWillAppear 中以模态方式呈现 registerController:

let reg = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "signup") as! RegisterController
reg.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
reg.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
reg.view.frame = self.view.frame
self.view.addSubview(reg.view)
Run Code Online (Sandbox Code Playgroud)

没有问题。但是如果我通过将其推送到导航控制器堆栈来呈现它:

let v = RegisterController()
    self.navigationController?.pushViewController(v, animated: true)
Run Code Online (Sandbox Code Playgroud)

应用程序崩溃并表示注册按钮的 IBOutlet(位于 registerController 中)为零。我重新创建了插座并清理了项目并重新启动了 xcode,但没有任何效果...

mat*_*att 5

它\xe2\x80\x99s 不是\xe2\x80\x9cbug\xe2\x80\x9d。您的代码是错误的\xe2\x80\x99s。它与推动与呈现无关。\xe2\x80\x99s 这行是错误的:

\n\n
let v = RegisterController()\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将创建一个没有连接插座的准系统视图控制器。这些出口连接在此类的故事板实例中。正如您在第一个代码中所做的那样,从故事板创建视图控制器,一切都会好起来的。

\n\n
let v = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "signup") as! RegisterController\n
Run Code Online (Sandbox Code Playgroud)\n