我是iOS开发的新手。我有一个带有2个视图控制器的故事板,我将它们链接到UIViewController类,当我尝试从第一个类加载第二个类时(例如进入主菜单的启动画面),然后是'菜单& #39;不会从故事板加载视图。它加载黑屏。我已经将类分配给了故事板右侧边栏中的viewcontroller,并将屏幕变为红色以查看它是否加载了类,但是如果我将红色输出,它会加载黑屏,而不是所需的屏幕来自故事板。
屏幕1(Splash)的代码:
func switchScreen() {
let secondViewController:vcMainLogin = vcMainLogin()
self.presentViewController(secondViewController, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "switchScreen", userInfo: nil, repeats: false)
}
屏幕2(登录/菜单)&#39>代码:
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.redColor()
// Do any additional setup after loading the view.
}
正在加载,因为屏幕的颜色变为红色,但当我拿出它时,它会加载黑色,而不是故事板中的屏幕。
答案 0 :(得分:14)
您需要从故事板中实例化视图控制器,而不是通过initialize函数创建它。为此,您需要在界面构建器(视图 - >实用程序 - >身份检查器)中为视图控制器分配storyboardID。在这个例子中,我加载了一个视图控制器,其故事板ID为" VC2"来自名为" MainStoryboard"的故事板。
let mainStoryboard = UIStoryboard(name: "MainStoryboard", bundle: NSBundle.mainBundle())
let vc : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("VC2") as UIViewController
以下是等效的Objective-c代码供参考
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"mainStoryboard" bundle:[NSBundle mainBundle]];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"VC2"];
答案 1 :(得分:0)
我还不习惯Swift。但是,它看起来好像你只是加载一个全新的mcMainLogin视图控制器,而不是从一个nib文件初始化它或从故事板加载它。当然它会是空的(黑色)。
回到引用或等待有Swift经验的人告诉你如何从故事板加载视图控制器。
如果以编程方式创建所有视图控制器并以编程方式进行导航,则根本不需要故事板。您可以更好地遵守故事板概念,包括导航至少90%以上的导航事件或使用个性化的nib / xib文件。