在App Delegate中管理两个故事板

时间:2014-08-23 20:19:11

标签: swift uistoryboard

我已决定避免使用自动布局,因此我正在尝试实施代码,以使我的应用根据屏幕尺寸管理两个不同的故事板。

我一直在关注本教程:http://pinkstone.co.uk/how-to-load-a-different-storyboard-depending-on-screen-size-in-ios/

我在尝试将Objective C代码转换为Swift时遇到问题。

以下是我目前在AppDelegate中的代码:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func grabStoryboard() -> UIStoryboard {
    var storyboard = UIStoryboard()
    var height = UIScreen.mainScreen().bounds.size.height

    if height == 480 {
        storyboard = UIStoryboard(name: "Main3.5", bundle: nil)
    } else {
        storyboard = UIStoryboard(name: "Main", bundle: nil)
    }
    return storyboard
}

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
    // Override point for customization after application launch.   

    var storyboard: UIStoryboard = self.grabStoryboard()

    self.window?.rootViewController.storyboard.instantiateInitialViewController()
    self.window?.makeKeyAndVisible()

    return true
}

该应用程序运行,我没有任何错误,但无论我是在3.5英寸设备还是4英寸设备上运行应用程序,我只需要4英寸的故事板。

我哪里错了?

2 个答案:

答案 0 :(得分:6)

问题在于:

self.window?.rootViewController.storyboard.instantiateInitialViewController()

你应该改用:

self.window?.rootViewController = storyboard.instantiateInitialViewController()

修改:我已移除as UIViewController,因为不再需要它。

答案 1 :(得分:1)

对于使用Xcode 7或更高版本的人,可能是由于Swift 2.0,这一行:

self.window?.rootViewController.storyboard.instantiateInitialViewController()

实际应该是:

self.window?.rootViewController = storyboard.instantiateInitialViewController()

请注意,不再需要as UIViewController