答案 0 :(得分:3)
如果你刚引用AuthViewController()
,你会看到这种行为,但根本没有引用故事板。那是因为当你只是创建一个AuthViewController
的实例时,它无法知道故事板中与该类相关联的场景。因此,所有IBOutlet
引用都将为nil
。
相反,如果您以编程方式转换到此场景,则可以使用其“故事板ID”实例化视图控制器:
在Interface Builder右侧面板的“Identity Inspector”中指定视图控制器场景的故事板ID:
一旦你这样做,而不是做以下的事情,这将无效:
let controller = AuthViewController()
// now do something with `controller`, e.g.
presentViewController(controller, animated: true, completion: nil)
您现在可以使用其故事板ID正确实例化此AuthViewController
:
let controller = storyboard?.instantiateViewControllerWithIdentifier("AuthScene")
presentViewController(controller!, animated: true, completion: nil)
或者,如果你想在两个场景之间转换,我更喜欢使用故事板segues:
因此,通过 control - 从原始场景上方的视图控制器图标拖动到目标场景,在两个场景之间创建一个segue:
这会创建一个没有链接到任何按钮或类似东西的segue。它只是直接在两个场景之间的一个segue,在你以编程方式执行之前不会被调用。
为该segue提供自己的故事板ID:
现在您可以通过编程方式执行该segue:
performSegueWithIdentifier("TransitionToAuthScene", sender: self)
后一种方法的优点是(a)故事板现在可视化地表示您的应用程序的流程; (b)你可以使用展开赛段等。
-
最后一点想法:
如果您没有以编程方式过渡到此场景,另一种可能性是您没有在Interface Builder中挂钩IBOutlet
。鉴于“Auth Web View”标签显示在文档大纲中,我认为您已成功连接IBOutlet
,但这是另一件需要检查的事情。您可以通过选择Web视图,然后查看Interface Builder右侧的“Connections Inspector”面板来确认这一点:
稍后您在评论中提到了在viewDidLoad
中执行此转换。这总是从故事板转换到新场景的错误位置,因为您经常会在转换到相关场景的过程中,并且iOS会变得混乱。
最好将此类代码推迟到viewDidAppear
(或跳过“源”视图控制器并直接转换到此“auth”场景)。