2012-03-17 4 views
6

なぜこれが起こっているのか理解しようとしていますが、私の普遍的なアプリのiPad版では、iPadの代わりにiPhone .xibが読み込まれているようです。iPad用ユニバーサルアプリでiPadの.xibファイルを読み込めませんか?

私は自分のiPhone xibに〜iphone.xibの接尾辞を付けて、私はiPadを.xibとちょうど残しました。誰かが彼らのために働いたと言ったので、私はそれを読むために読むが、私の場合は私のために働いていない!

別の.xibファイルに対して〜ipad.xibと〜iphone.xibを行っても、iPhone版が読み込まれます!

* ※iPad版ではなくiPhone版が読み込まれていることを完全に確認する方法はありますか?

とiPadは、iPadのの.xibsをロードするように、この問題を解決する方法はありますか?**

ありがとう!

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

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

// Override point for customization after application launch. 
    self.viewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]] autorelease]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

それは私のために働く...奇妙な。しかし、アプリは本当にユニバーサルですか?それは "フルスクリーン"で動作しますか? – fbernardo

+0

はい、フルスクリーンで表示されます。プロジェクト設定内のデバイスファミリとターゲット設定は、両方とも「iPhone/iPad」です。 2つの異なる接尾辞を使用していますか、それとも別の方法で使用していますか? –

+0

コントローラー〜ipad.xibとコントローラー〜iphone.xibそしてコードでは、[[Controller alloc] initWithNibName:@ "Controller" bundle:nil]と呼ぶだけです。 – fbernardo

答えて

4

私のアプリでは、このようにしています。私はiPadビュー用に別々の.h、.m、およびXIBファイルを作成し、AppDelegateではif条件を作成して、表示するビューコントローラを決定します。
Btw。私はXIBでこれらの接尾辞を使用しません、私はそれらを私が欲しいものに命名します。

マイAppDelegate.hファイル(その一部)

@class FirstViewController; 
@class FirstIpadViewController;  
....... 
....... 
@property (nonatomic, retain) IBOutlet FirstViewController *viewController; 
@property (nonatomic, retain) IBOutlet FirstIpadViewController *ipadViewController; 

マイAppDelegate.mファイル(その一部)

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
} else { 
    self.window.rootViewController = self.ipadViewController; 
    [self.window makeKeyAndVisible]; 
} 

これは間違いなくそれを行う必要があります。ちょうどあなたのビューコントローラに、.hファイルにクラスとプロパティを変更し、私はそれを行う方法だけを見出した:)

EDIT

を行くために良いことがあります。また、適切な命名規則は_iPhoneとiPadです。これは基本的に上記と同じですが、変更は同じ.hと.mファイルを持ちますが、異なるXIBを持つことになります。 AppDelegate .Mファイルで

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
    } else { 
     self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
    } 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

悲しいことに、両方のxibsに1つのクラスを使用するので、どうすればこの回避策を実行できますか?また、私はIBOutletsを接続するためのmainWindow.xibを持っていません。プログラムで接続するだけです。 –

+0

よろしくお願いします。答えのコードを更新しました:) –

+0

ああ私は見る!したがって、〜iphone.xibと〜ipad.xibではなく、_iPhone.xibと_iPad.xibの代わりに? –

0

独自のカスタムxibsを使用しながら、このソリューションは、ストーリーボードで動作します。これは、ビューのために同じ.H & .Mファイルを再利用:

  • ViewController.h
  • ViewController.m
  • ViewController.xib
  • のViewController〜iPad.xib

をInをあなたのViewController.mファイルは、次を追加します。

- (id)initWithCoder:(NSCoder *)aDecoder 
    { 
     if (self) 
     { 
      NSString* nibName = NSStringFromClass([self class]); 
      if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
      { 
       self = [super initWithNibName:nibName bundle:nil]; 
      } 
      else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
      { 
       self = [super initWithNibName:[nibName stringByAppendingString:@"~iPad"] bundle:nil]; 
      } 
      return self; 
     } 
     return self; 
    } 

xibsにFile's Owner View Controllerカスタムクラス名が設定され、ビューアウトレットが設定されていることを確認してください。

関連する問題