未选择 iOS iPad 故事板

Posted

技术标签:

【中文标题】未选择 iOS iPad 故事板【英文标题】:iOS iPad storyboard is not being selected 【发布时间】:2014-01-13 15:07:21 【问题描述】:

Xcode 5 似乎没有选择将我的 iPad 故事板用于 iPad 设备,即使我指定了它。

这就是我告诉 Xcode 5 使用 iPad 故事板的方式:

我去了General下的项目设置 选定的设备:Universal 然后我点击iPad 并在Main Interface 中写了MainStoryboard-iPad.storyboard

但由于某种原因,即使我对我的 MainStoryboard-iPad 故事板进行了更改,当我尝试在 iPad 上运行它时它也没有显示。

我的项目中只有两个故事板

MainStoryboard-iPad.storyboard

MainStoryboard.storyboard

你有什么想法吗?

哦,顺便说一句,当我第一次选择 Universal 时,我收到一个盒子问我一些关于复制的问题(我从来没有仔细阅读过)。我刚打了是。不确定那个盒子到底做了什么。

编辑

在我的 AppDelegate.m 中运行的代码

- (void)applicationDidBecomeActive:(UIApplication *)application 
        AppDelegate *app = [[UIApplication sharedApplication] delegate];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        UIViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"mainStoryBoard"];

        UINavigationController *nvc = (UINavigationController*)self.window.rootViewController;
        app.window.rootViewController = ivc;

【问题讨论】:

您是否对 UI 在 AppDelegate 中的显示方式进行了任何更改?喜欢更改根视图控制器? 啊……是的,我是!但不是在第一个屏幕上 你能发布你的代码吗?这可能是相关的。 用代码更新了问题 这里有同样的问题。在 Xcode 5.0.2 中,在一个“通用”但只有 iPhone 故事板的应用程序中,我添加了一个新的故事板并选择了 iPad。在常规目标设置中,我无法为 iPad 选择此情节提要 - Xcode 不断将其还原为 iPhone 情节提要。这令人抓狂。没有错误信息输出到控制台。 【参考方案1】:

我刚刚遇到这个。

这些是您需要执行的步骤:

    确保“部署信息”-> 设备为“通用” 为 iPad 创建故事板(例如)MainStoryboard_iPad.storyboard 现在转到您的 Infor.plist 为“Main Storyboard file base name (iPad)”添加行并使用 MainStoryboard_iPad 作为字符串的值

现在你可以开始了!

【讨论】:

【参考方案2】:

您的代码正在覆盖设备类型的默认情节提要。您正在抓取 MainStoryboard,从中实例化一个视图控制器并将其设置为根。这通常由情节提要本身处理。它使用您选择的视图控制器作为根。尝试删除所有代码以手动设置情节提要。

在 github 上查看此项目以获取无代码切换故事板的示例:https://github.com/danielmackenzie/StoryboardSelection

Xcode 项目指向每个设备类型的每个故事板,并在启动时自动选择适当的板。

【讨论】:

完全可以接受他们在代码中所做的事情。我做了一些更简单的事情,他们应该关注的是他们为什么在applicationDidBecomeActive: 当然,这行得通,应该在application:didFinishLaunchingWithOptions:。但是,最好让项目/情节提要配置来处理加载,特别是如果只需要不同情节提要是因为不同的设备类型。 除了将它放在didFinishLaunchingWithOptions: 中,这无关紧要。如果您在代码中选择@"mainStoryboard",它仍然会完成它的工作并选择它正在运行的正确设备。因为当我这样做时,这对我来说非常好。所以我建议你的答案需要有证据支持。 我添加了一个自动处理情节提要选择的示例项目。【参考方案3】:

您需要在应用的 info.plist 中为 iPad 输入一个条目

在您的支持文件组中查找应用的 info.plist。

您会看到 iPhone 故事板的条目,但不会看到 iPad 条目。

iPhone 条目应如下所示:

Main storyboard file base name

它应该有你的 iPhone 故事板的名称(无文件扩展名)作为它的字符串值。像这样的:

iPhone-Storyboard

在 pList 中添加一个新条目并输入此字符串作为键:

Main storyboard file base name (iPad)

确保数据类型是字符串。

您现在可以从 Target 上应用的常规设置中选择所需的 iPad 故事板。

我也遇到了这个问题,并认为您需要一个清晰的解释和解决方案。

有时,Xcode 相当令人抓狂,不是吗?希望这会有所帮助。

【讨论】:

【参考方案4】:

// 应用程序启动后的自定义覆盖点。

if (<your implementation>) 

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" 
                                                             bundle: nil];
    YourViewController *yourController = (YourViewController *)[mainStoryboard     
      instantiateViewControllerWithIdentifier:@"YourViewControllerID"];
    self.window.rootViewController = yourController;

返回是;

【讨论】:

【参考方案5】:

您的逻辑没有考虑到您的设备。 AFAIK,没有任何方法可以查看您的命名后缀(“-iPad”)并自动选择正确的故事板文件。

要修复它,只需用一些逻辑替换实例化情节提要的调用,以根据设备选择正确的情节。

UIStoryboard* storyboard;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 

    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard-iPad" bundle:nil];
 else 

    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

【讨论】:

Storyboards 和 Xcode 项目旨在自动选择合适的 Storyboard 文件。根本不需要此代码。

以上是关于未选择 iOS iPad 故事板的主要内容,如果未能解决你的问题,请参考以下文章

适用于 iOS 和 iPad 的故事板

真实设备未按照 Xcode 7.3.1 中的 iPad 故事板显示更改

目标 C - iPhone/iPad 应用程序 - 故事板未反映应用程序更改的奇怪问题

找不到故事板文件“MainStoryboard_iPad~ipad.storyboardc”

iOS 自动布局:如何在 Xcode 故事板中为 iPad 横向和 iPad 纵向设计不同的布局?

iPad 模拟器/设备使用 iPhone 故事板