Dynamically load nib for iPhone/iPad within view controller

qui picture qui · Jun 16, 2010 · Viewed 21.9k times · Source

I have converted an iPhone application using the wizard like thing in XCode into a universal app.

It builds fine but obviously looks a bit rubbish in some areas :)

I need to load nibs according to which device is being used. I dont wish to create my view controllers using initWithNib as I already have code to create the controllers with some data (initWithMyLovelyData) which doesnt do anything to do with nib loading.

I know to find out the device you use UI_USER_INTERFACE_IDIOM() so I tried overriding the initWithNibName within the actual view controllers themselves, assuming they get called internally somehow. But it's not working as I guess I am unsure of the syntax.

I have tried

if(ipad..) self = [super initWithNibName:@"MyIpadNib" bundle:nibBundleOrNil];

And that doesnt work :/

EDIT - I know I have massively edited this, made my question a bit more specific after doing some more research - apologies!

Answer

Adam picture Adam · Mar 7, 2012

Actually, Apple does all this automatically, just name your NIB files:

MyViewController~iphone.xib // iPhone
MyViewController~ipad.xib // iPad

and load your view controller with the smallest amount of code:

[[MyViewController alloc] initWithNibName:nil bundle:nil]; // Apple will take care of everything