0

私は開発中のユニバーサルアプリを持っています。

アプリはNIBを使用しており、たとえば、

ExcitingViewController.xib
ExcitingViewController~iPad.xib

iPhoneまたはiPadシミュレーターでは、適切なバリアントが自動的に取得されます(つまり、コードを変更せずに、iPadで〜iPadサフィックスが付いたバリアントが選択されます)。

ただし、実際のiPadでは、iPhoneバリアントが常に使用されます。

プログラムで適切なNIBを選択することについての言及を見てきましたが、これはシミュレーターで自動的に処理されるため、実際の除氷ができなかった理由がわかりません。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
    excitingViewController = [[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil];
}
else
{
    excitingViewController = [[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController~iPad" bundle:nil];
}

〜iPadのバリエーションを実際のデバイスで自動的に選択するためのヒントはありますか?

(ところで、シミュレーターは通常、正しい動作を示すのに完全に信頼できるので、これらの違い/バグを見つけるのは面倒です)。

4

3 に答える 3

0

私のプロジェクトで行ったことは、initWithNibName / initWithCoder / initをオーバーライドして、それがiPadであるかどうかを確認し、そうである場合は適切なものをロードすることです。

iPadチェック用のマクロがpchにあります。

// iPad detection
#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD() (false)
#endif

次に、必要に応じてコードでIS_IPAD()を使用します

于 2012-03-02T00:08:24.747 に答える
0

OK、答えはあなたがこれをプログラムで処理する必要があるということのようです(質問に示されているように)、これはAppleによる機会を逃したように見えますが、おそらくそれ以上のものがあります。

于 2012-03-10T11:13:42.023 に答える
0

申し訳ありませんが、パーティーに遅れましたが、次のようなことを試しましたか。

  • ExcitingViewController〜iphone.xib
  • ExcitingViewController〜ipad.xib

これはデバイスに依存しないため、

[[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil]

ユーザーインターフェイスのイディオムを確認しなくても、両方のデバイスで機能するはずです。

これは、リソースプログラミングガイドで説明されています。

于 2013-06-22T04:09:23.320 に答える