Ios 以编程方式更改故事板';斯威夫特的班级

Ios 以编程方式更改故事板';斯威夫特的班级,ios,swift,class,storyboard,uistoryboard,Ios,Swift,Class,Storyboard,Uistoryboard,我正在开发一款游戏,我一直在保存关卡设计以备将来使用。不管怎样,我现在在这里遇到了一些问题。我希望对所有级别使用相同的情节提要,但只需将情节提要的类更改为不同的视图控制器。我假设在你的项目中有50多个故事板不是一件好事,如果我错了,请纠正我 现在这是我的“示例”代码,只是想让大家知道我想做什么 let storyboard = UIStoryboard(name: "Main", bundle: nil) nextViewConroller = storyboard.instan

我正在开发一款游戏,我一直在保存关卡设计以备将来使用。不管怎样,我现在在这里遇到了一些问题。我希望对所有级别使用相同的情节提要,但只需将情节提要的类更改为不同的视图控制器。我假设在你的项目中有50多个故事板不是一件好事,如果我错了,请纠正我

现在这是我的“示例”代码,只是想让大家知道我想做什么

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    nextViewConroller = storyboard.instantiateViewControllerWithIdentifier("levelStoryboard")
    storyboard.class = "Level" + String(currentLevel) + "Controller" // Purely concept code - does not work.
    presentViewController(nextViewConroller, animated: true, completion: nil)

好的程序员会尽可能多地重用东西。如果您的级别基本相同,只是在视图结构/逻辑上有一些差异,那么我建议制作一个指向一个视图控制器的故事板,上面写着“LevelViewController”。然后,您可以使用一些配置函数来为特定级别配置此控制器,在prepareForSegue中有一个很好的地方可以实现这一点:

func prepareForSegue(segue:UIStoryboardSegue) {

         let storyboard = UIStoryboard(name: "Main", bundle: nil)
    nextViewConroller = storyboard.instantiateViewControllerWithIdentifier("levelStoryboard") as! LevelViewController
     nextviewcontroller.configureForLevel(2)

}
但是,如果由于每个级别都完全不同而必须使用不同的视图控制器,则只需传递要使用的新类的标识符:

   let storyboard = UIStoryboard(name: "Main", bundle: nil)
nextViewConroller = storyboard.instantiateViewControllerWithIdentifier("level_0") as! Level0ViewController
请记住InstanceViewControllerWithiIdentifier:在序列图像板文件中查看是否有具有该标识符的视图控制器对象,并返回该对象。此返回的视图控制器也将是您在identity inspector的“自定义类”部分中指定的同一个类


无论使用哪种技术,请确保在情节提要中设置自定义类

如果您有一个公共UI,它根据某些条件具有不同的逻辑,那么您可以根据需要将不同的逻辑划分为多个类,并且只使用IB的视图控制器作为公共用户界面元素的通道。您在IB中指定的视图控制器类将只包含IBOutlets和IBActions以及一个带有“logic”类的适当实例的变量。初始化时,视图控制器只需实例化逻辑类的适当类型(使用工厂模式的好地方),并将插座链接到对象或仅作为代理。

我不清楚您在这里试图做什么,或者您认为更改“故事板类”意味着什么。为什么您认为您需要50多个视图控制器?他们有什么不同,你想重复什么?它们是否共享相同的视图,在这种情况下,为什么需要这么多控制器?就我理解你的问题而言,我认为你不需要为每个级别创建一个新类,而是需要视图控制器的一个新实例。所有级别都有不同的功能,但可以使用相同的故事板。因此,我有50个视图控制器,我希望在identity inspector中找到的自定义类更改为相应的级别。