11

メインのストーリーボードを手動でロードするユニバーサル アプリがありapplication:didFinishLaunchingWithOptionsます。

iPhone と iPad 用の 2 つのストーリーボードがあり~iPhone~iPadサフィックスは と です。次を使用してストーリーボードをロードしています:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
self.initialViewController = [storyboard instantiateInitialViewController];

これUnknown class ViewController in Interface Builder file.はコンソールに出力されるため、明らかに正しいストーリーボードがロードされていません。ただし、使用する[UIStoryboard storyboardWithName:@"MainStoryboard~iPhone" bundle:nil];と問題なく動作しますが、もちろん動作するのは iPhone のみです。

私は何が欠けていますか?名前サフィックスを使用して正しいストーリーボードを自動的に選択するにはどうすればよいですか?

4

4 に答える 4

12

ファイル名の接尾辞に基づいてストーリーボードが自動的に選択されることを知りません。userInterfaceIdiomiPadとiPhoneのどちらを選択するかを使用できます。

if ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPad) {
    UIStoryboard *storyboard = 
    [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
} else {
    [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
}

ただし、これを実行して特定のView Controllerを起動する場合は、「開始」矢印をストーリーボード内の優先するViewControllerにドラッグするだけです。

または-ストーリーボードでビューコントローラーを選択し、属性インストラクターに移動してチェックマークを付けますisInitialViewController

于 2013-02-03T12:09:55.587 に答える
5

これは、info.plist ファイル内で直接設定できる別のものです。プログラミングの努力は必要ありません。デフォルトで「メイン」が含まれる「メイン ストーリーボード ファイルのベース名」という名前のプロパティを探します。

「メイン ストーリーボード ファイルのベース名 (iPad)」という名前の別のプロパティを追加して、iPad で使用することができます。

これは、plist の生の出力がどのように見えるかです。

<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIMainStoryboardFile~ipad</key>
<string>iPad</string>

私の知る限り、Main~iPad.storyboard という名前の 2 番目のストーリーボードを追加することもできます (UIMainStoryboardFile キーが Main として設定されている場合)。そして、それはiPad用に取り上げられます。ただし、しばらくこれをテストしていません。

于 2015-07-02T18:16:18.880 に答える
0

// appdelegate クラスでは、アプリケーションの起動中に指定されたストーリー ボードを選択します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        UIStoryboard *storyboard1;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        storyboard1 = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:[NSBundle mainBundle]];
    }
    else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        storyboard1 = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:[NSBundle mainBundle]];
    }
    UIViewController *vc = [storyboard instantiateInitialViewController];

    // Set root view controller and make windows visible
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];

    return YES;
}
于 2014-12-04T05:55:15.063 に答える