14

Im having trouble figuring out how to load a separate XIB for iPad or for iPhone in a Universal app.

Its easy enough to convert the Xcode project to Universal and have separate Main view interfaces.

My problem is the secondary view and getting it to have separate interfaces for both iPad and iPhone.

Please offer any help you can give as I have been working on this issue for days without success. Thanks in advance!

Linuxmint
  • 4,716
  • 11
  • 44
  • 64

3 Answers3

32

I know that @indragie's answer is a very common one, but it's a common misunderstanding that will cause you a lot more work than you actually need to do.

As long as you name the xib files a certain way, they will be automatically selected for either iPhone or iPad. Check out my answer to this same problem on another post:

iOS: Using device modifiers for loading xib files?

Community
  • 1
  • 1
Kenny Wyland
  • 20,844
  • 26
  • 117
  • 229
3

Just add a file named MainView~ipad.xib makes it load this one i.s.o. MainView.xib when running on a iPad..

Digdas
  • 31
  • 1
2

You can use UI_USER_INTERFACE_IDIOM() to check whether the application is running on an iPad or an iPhone/iPod touch:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // Running on iPad
} else {
    // Running on iPhone or iPod touch
}

For more information on loading NIB files, read Apple's Resource Programming Guide on Nib Files. You may want to specifically check out the Loading Nib Files Programmatically section which shows how to programatiically load a NIB from within your code using NSBundle. You can then use this in conjunction with the above code to correctly load the proper NIB depending on which device you're runining on.

indragie
  • 18,002
  • 16
  • 95
  • 164
  • 6
    -1 The iOS SDK provides a simple naming convention which will load the correct xib file based on device. You don't need to proliferate this if statement structure throughout your code. I describe it below in my answer. – Kenny Wyland Mar 19 '11 at 18:00