【问题标题】:Multiple storyboards in SwiftSwift 中的多个故事板
【发布时间】:2015-07-02 12:52:38
【问题描述】:

我有一个应用程序,它有 4 个故事板,每个故事板用于不同的设备(iphone4、5、6、6+)。我曾尝试使用自动约束,但由于我的应用程序很复杂,我无法弄清楚。我听说如果你有多个故事板,应该有一种方法可以指定在应用程序委托中使用哪个故事板。如何在应用程序委托中为正确的设备指定正确的故事板?我目前有四个故事板,命名为:

iphone4s.storyboard
iphone5.storyboard
iphone6.storyboard
iphone6plus.storyboard

谢谢。

【问题讨论】:

  • 为什么你使用 4 个故事板,在一个故事板中处理所有设备兄弟,请优化工作。

标签: ios iphone swift


【解决方案1】:

据我说,这些天我们使用 autoLayout,它知道如何根据屏幕大小和约束来布局其视图

如您所问,您可以在 applicationdidFinishLaunchingWithOptions 方法中从 AppDelegate 覆盖情节提要

    let storyBoard : UIStoryboard = UIStoryboard(name: "iphone4s", bundle: nil)
    //you can check your device and override the storyboard name
    let initialViewController: UIViewController =  storyBoard.instantiateInitialViewController()!
    self.window?.rootViewController? = initialViewController

【讨论】:

    【解决方案2】:

    实现一个函数,在指定名称时检索情节提要。

    func getStoryBoard(name : String)-> UIStoryboard
    {
        var storyBoard = UIStoryboard(name: name, bundle: nil);
        return storyBoard;
    }
    

    更改应用委托方法,如:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
    {
        var storyBoard = getStoryBoard("Main") // Change the storyboard name based on the device, you may need to write a condition here for that
        var initialViewController: UIViewController = storyBoard.instantiateInitialViewController() as! UIViewController
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
        // Override point for customization after application launch.
        return true
    }
    

    【讨论】:

    • 即使这个答案被埋在线程的底部,它也是唯一有效的。抱歉花了这么长时间才投票。
    【解决方案3】:

    为了为不同的设备启动不同的故事板,你需要重写 rootViewController 对象。

    var myDeviceStoryboard : UIStoryboard = UIStoryboard(name: "DeviceStoryboard", bundle: NSBundle.mainBundle())
    var firstVC : MyDeviceFirstViewController = myDeviceStoryboard.instantiateViewControllerWithIdentifier("MyDeviceFirstViewController") as! MyDeviceFirstViewController
    self.window?.rootViewController = MyDeviceFirstViewController //这应该是一个导航控制器

    此外,您需要覆盖项目设置和情节提要中的一些设置。参考附图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2012-09-30
      相关资源
      最近更新 更多