如何在 iOS 中调用不同的 Storyboard?

Posted

技术标签:

【中文标题】如何在 iOS 中调用不同的 Storyboard?【英文标题】:How to call different Storyboards in iOS? 【发布时间】:2016-09-20 12:30:08 【问题描述】:

我正在使用两个故事板,第一个用于 iphone Main.storyboard,第二个是 Main_iPad.storyboard,我想分别为 iPad 和 iPhone 调用我正在使用此代码:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)  
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
    EABaseRootVC *loginController = [storyboard instantiateViewControllerWithIdentifier:@"root2"];
    UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:loginController];
    self.window.rootViewController=navController;

else


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    EABaseRootVC *loginController = [storyboard instantiateViewControllerWithIdentifier:@"root"];
    UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:loginController];
    self.window.rootViewController=navController;

但它总是显示 Main.storyboard 的 iPhone 资产。

我已经关注这个Different storyboards for iPhone and iPad in xcode 6

如果您有任何其他想法,请建议我。 我做错了什么?

【问题讨论】:

【参考方案1】:

要具体识别 Apple 设备是 iPhone 还是 iPad,请使用以下代码:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    // code for iPad
else
    // code for iPhone

并且必须在项目的.plist 文件中添加这两个键。

Main storyboard file base name (iPad)
Main storyboard file base name (iPhone)

看图:

【讨论】:

我已经在我的 info.plist 文件中添加了这些东西,但没有工作。 可能您已经更新了项目中的另一个 plist 文件,请仔细检查它..此代码工作正常 是的,我知道这段代码可以正常工作,但最后不行,让我检查一下。 您需要确保您的项目配置为构建一个“通用”应用程序,而不仅仅是 iPhone。

以上是关于如何在 iOS 中调用不同的 Storyboard?的主要内容,如果未能解决你的问题,请参考以下文章

从 Xamarin.iOS 绑定库中引用 Storyboard

iOS中Storyboard使用要点记录

iOS之Storyboard References

iOS 9 Safe Area Top 约束的 xib 和 storyboard 不同

使用 Storyboard id iOS 以编程方式调用视图控制器

IOS:程序化 rootViewController 以不同的方式呈现视图到 Storyboard 'isInitialView'