视图控制器无法加载故事板视图

5
我是一名iOS开发新手。我有一个包含两个视图控制器的故事板,我将它们链接到UIViewController类,当我尝试从第一个类加载第二个类时(就像启动画面进入主菜单),它可以正常工作,但是“菜单”不会从故事板中加载视图,而是加载了一个黑屏。我已经在故事板的右侧边栏中将该类分配给视图控制器,并将屏幕颜色设置为红色以查看它是否加载了该类,它确实加载了,但如果我去掉红色,它会加载一个黑屏,而不是来自故事板的所需屏幕。
第1个屏幕(启动画面)的代码:
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 (登录/菜单) 的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.redColor()
    // Do any additional setup after loading the view.
}

由于屏幕的颜色变成了红色,所以正在加载中,但是当我将其删除后,它会加载黑色,而不是来自故事板的屏幕。


Swift不是Objective-C。 - Hermann Klecker
只是出于好奇,为什么不连接一个segue并使用performSegueWithIdentifier函数呢? - Brandon
2个回答

14

你需要从Storyboard中实例化视图控制器,而不是通过initialize函数创建它。为此,你需要在Interface Builder中为你的视图控制器分配一个Storyboard ID(View -> Utilities -> Identity Inspector)。在这个示例中,我从名为“MainStoryboard”的Storyboard中加载了一个Storyboard ID为“VC2”的视图控制器。

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"];

ViewController有一个属性可以获取到故事板,self.storyboard。 - Peter Ahlberg
1
没错;但是如果视图控制器不是从故事板中加载的,则故事板属性将为nil。如果VC在不同的故事板中声明,则也无法使用故事板属性。因此,为了保持一致,我的偏好是遵循一个通用的原则,更加明确。 - Brandon

0

我还不习惯使用Swift。然而,对我来说,似乎你只需要实例化一个全新的mcMainLogin视图控制器,而不是从nib文件初始化它或从storyboard中加载它。自然地,它会是空的(黑色的)。

回到参考资料,或者等待有Swift经验的人告诉你如何从storyboard中加载视图控制器。

如果您所有的视图控制器都是以编程方式创建的,并且导航也是以编程方式完成的,那么根本不需要storyboard。您最好遵循storyboard概念,包括至少在90%以上的所有导航事件中进行导航,或者使用单独的nib / xib文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接