Hes*_*gid 11 iphone ios uistoryboard
我有一个通用的应用程序,我手动加载我的主要故事板application:didFinishLaunchingWithOptions.
我有2个故事板的iPhone和iPad,因为他们~iPhone和~iPad后缀.我正在使用以下方式加载我的故事板:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
self.initialViewController = [storyboard instantiateInitialViewController];
Run Code Online (Sandbox Code Playgroud)
这打印Unknown class ViewController in Interface Builder file.到控制台,显然它没有加载正确的故事板.但是,当我使用[UIStoryboard storyboardWithName:@"MainStoryboard~iPhone" bundle:nil];它工作正常,但当然只适用于iPhone.
我错过了什么?如何使用名称后缀自动选择正确的故事板?
fou*_*dry 12
我不知道基于文件名后缀自动选择故事板.你可以userInterfaceIdiom用来选择iPad和iPhone:
if ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPad) {
UIStoryboard *storyboard =
[UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
} else {
[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
}
Run Code Online (Sandbox Code Playgroud)
但是如果你这样做是为了启动一个特定的视图控制器,你需要做的就是将"开始"箭头拖到故事板中的首选视图控制器
或者 - 在故事板中选择视图控制器,转到属性instpector并勾选 isInitialViewController
这是您可以直接在 info.plist 文件中设置的另一件事。无需任何编程工作。查找名为“Main storyboard file base name”的属性,该属性将具有“Main”,默认情况下。
您可以添加另一个名为“主故事板文件基本名称(iPad)”的属性,然后该将用于 iPad。
这是 plist 中原始输出的样子:
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIMainStoryboardFile~ipad</key>
<string>iPad</string>
Run Code Online (Sandbox Code Playgroud)
Afaik 也可以简单地添加一个名为 Main~iPad.storyboard 的第二个故事板(如果 UIMainStoryboardFile 键设置为 Main)。这将被用于 iPad。有一段时间没有测试这个。