未选择 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 故事板的主要内容,如果未能解决你的问题,请参考以下文章
真实设备未按照 Xcode 7.3.1 中的 iPad 故事板显示更改
目标 C - iPhone/iPad 应用程序 - 故事板未反映应用程序更改的奇怪问题
找不到故事板文件“MainStoryboard_iPad~ipad.storyboardc”