Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to switch to different Storyboard for iPhone 5?

Just as an app utilizes different storyboards for iPad and iPhone, I would like my app to use a different storyboard for the iPhone 5. Since there is no option in the Info.plist to select default storyboard for iPhone 5, how would I programmatically call the storyboard?

I do not want to use AutoLayout for this app unless it is absolutely the last resort. I understand how to detect if a user is using an iPhone 5 or other device with the same screen size. I just need to know how to set the default storyboard without the plist.

like image 782
user1486548 Avatar asked Oct 02 '12 18:10

user1486548


People also ask

How do you edit storyboard on Iphone?

In Xcode 9.2, simply go to your Storyboard and go to the bottom, Click View As and choose a device you like.

How do I create a new storyboard?

From the File menu, choose New→New File... In the New File dialog, make sure you have selected the Resource subcategory of the iOS category on the left. Then choose the Storyboard item on the right and press Next (see Figure 4-24). In this screen, pick the Device Family for which you want to create your storyboard.


2 Answers

I was looking for the same answer couple of weeks ago here's my solution hope helps..

-(void)initializeStoryBoardBasedOnScreenSize {      if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {    // The iOS device = iPhone or iPod Touch       CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;      if (iOSDeviceScreenSize.height == 480)     {   // iPhone 3GS, 4, and 4S and iPod Touch 3rd and 4th generation: 3.5 inch screen (diagonally measured)          // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone35         UIStoryboard *iPhone35Storyboard = [UIStoryboard storyboardWithName:@"Storyboard_iPhone35" bundle:nil];          // Instantiate the initial view controller object from the storyboard         UIViewController *initialViewController = [iPhone35Storyboard instantiateInitialViewController];          // Instantiate a UIWindow object and initialize it with the screen size of the iOS device         self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];          // Set the initial view controller to be the root view controller of the window object         self.window.rootViewController  = initialViewController;          // Set the window object to be the key window and show it         [self.window makeKeyAndVisible];     }      if (iOSDeviceScreenSize.height == 568)     {   // iPhone 5 and iPod Touch 5th generation: 4 inch screen (diagonally measured)          // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4         UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"Storyboard_iPhone4" bundle:nil];          // Instantiate the initial view controller object from the storyboard         UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];          // Instantiate a UIWindow object and initialize it with the screen size of the iOS device         self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];          // Set the initial view controller to be the root view controller of the window object         self.window.rootViewController  = initialViewController;          // Set the window object to be the key window and show it         [self.window makeKeyAndVisible];     }      } else if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)      {   // The iOS device = iPad      UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;     UINavigationController *navigationController = [splitViewController.viewControllers lastObject];     splitViewController.delegate = (id)navigationController.topViewController;      } } 

Call this method under AppDelegate ddiFinishLaunchingWithOptions: method And also don't forget the name your storyboards properly

Hope helps...

like image 79
lionserdar Avatar answered Sep 30 '22 18:09

lionserdar


This worked for me - slight refinement with wrapping getting the storyboard in a function

-(UIStoryboard*) getStoryboard {        UIStoryboard *storyBoard = nil;     if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {                  storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];     }else{         if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){             // The iOS device = iPhone or iPod Touch             CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;             if (iOSDeviceScreenSize.height == 480){                 // iPhone 3/4x                 storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_4" bundle:nil];              }else if (iOSDeviceScreenSize.height == 568){                 // iPhone 5 etc                 storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_5" bundle:nil];             }         }     }      ASSERT(storyBoard);     return storyBoard; }  UIStoryboard* mainStoryBoard = [self getStoryboard];     self.initialViewController = [mainStoryBoard instantiateInitialViewController];     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];     self.window.rootViewController = self.initialViewController;     [self.window makeKeyAndVisible]; 
like image 35
gheese Avatar answered Sep 30 '22 18:09

gheese