iOS iPad的storyboard没有被选择

3
看起来Xcode 5没有选择使用我的iPad故事板,即使我已经指定了它。以下是我告诉Xcode 5使用iPad故事板的方法:
1.在“通用”下,进入项目设置 2.选择设备:“Universal” 3.然后单击“iPad” 4.在“Main Interface”中写入“MainStoryboard-iPad.storyboard”
但是,由于某种原因,即使我更改了“MainStoryboard-iPad”故事板,当我尝试在iPad上运行它时仍未显示出来。
我的项目中只有两个故事板:“MainStoryboard-iPad.storyboard”和“MainStoryboard.storyboard”。
有什么想法吗?
顺便说一句,第一次选中通用时,我得到了一个关于复制的提示框(我没有仔细阅读)。我只是按了“是”。不确定该框实际上做了什么。
编辑:
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;
}

你是否正在更改AppDelegate中UI的显示方式?比如更改根视图控制器? - danielM
啊...是的,我在!但不是在第一个屏幕上。 - Alosyius
你能把相关的代码贴出来吗?这可能会有关联。 - danielM
已更新问题并附上代码。 - Alosyius
这里也有同样的问题。在Xcode 5.0.2中,我在一个“通用”的应用程序中添加了一个新的storyboard并选择了iPad,但是在“General Target Settings”中,我无法为iPad选择此storyboard - Xcode一直将其还原为iPhone storyboard。这真是令人发疯。控制台没有输出任何错误消息。 - Alex Zavatone
5个回答

3
我刚刚遇到了这个问题。以下是需要执行的步骤:
  1. 确保“Deployment Info”->“Devices”设为“Universal”
  2. 为iPad创建故事板(例如:MainStoryboard_iPad.storyboard)
  3. 现在转到您的Infor.plist
  4. 添加行“Main storyboard file base name (iPad)”,并将MainStoryboard_iPad用作字符串的值
现在你可以开始了!

1
你的代码正在覆盖设备类型的默认故事板。你正在获取MainStoryboard,从中实例化一个视图控制器并将其设置为根视图控制器。这通常由故事板本身处理。它使用您选择的视图控制器作为根视图控制器。尝试删除所有此类代码以手动设置故事板。
请查看github上的此项目,了解不需要代码进行故事板切换的示例: https://github.com/danielmackenzie/StoryboardSelection Xcode项目针对每种设备类型指向每个故事板,适当的故事板会在启动时自动选择。

在他们的代码中做他们正在做的事情是完全可以接受的。我做的更简单,他们应该关注的问题是为什么要在applicationDidBecomeActive:中这样做。 - Popeye
1
当然,这会起作用,并应该放在application:didFinishLaunchingWithOptions:中。然而,最好让项目/故事板配置处理加载,特别是如果不同的故事板之间的唯一需求是因为不同的设备类型。 - danielM
除了将其放在 didFinishLaunchingWithOptions: 中之外,这并不重要。如果您在代码中选择 @"mainStoryboard",它仍然会完成其工作并选择正在运行的正确设备。当我这样做时,这对我来说完全正常。因此,我建议您的答案需要有证据支持。 - Popeye
我添加了一个示例项目,可以自动处理故事板的选择。 - danielM

0

// 应用程序启动后的自定义重写点。

if (<your implementation>) {

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

返回 YES;


0

你需要在应用的info.plist中添加iPad的条目。

在Supporting Files组中查找你的应用的info.plist。

你会看到iPhone的storyboard的条目,但没有iPad的条目。

iPhone的条目应该是这样的:

Main storyboard file base name

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

iPhone-Storyboard

将一个新条目添加到pList中,并将此字符串作为键:

Main storyboard file base name (iPad)

确保数据类型为字符串。

您现在可以从应用程序目标的“常规设置”中选择要使用的iPad故事板。

我也遇到了这个问题,想给您提供一个清晰的解释和解决方案。

有时候,Xcode真的让人抓狂,不是吗?希望这可以帮到您。


-1

你的逻辑没有考虑到你的设备。据我所知,没有一种方法可以查看你的命名后缀(“-iPad”)并自动选择正确的故事板文件。

要解决这个问题,只需用一些逻辑替换调用来实例化你的故事板,以便根据设备选择正确的故事板。

UIStoryboard* storyboard;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{
    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard-iPad" bundle:nil];
} else 
{
    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
}

4
故事板和Xcode项目旨在自动选择适当的故事板文件。这段代码应该根本不需要。 - danielM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接