Remove storyboard and start app with a .xib

Patricia picture Patricia · Oct 22, 2013 · Viewed 8.5k times · Source

I've tried to follow the instructions on this Question. But I must not be doing something correctly because I am still getting a SIGABRT before I even get into the ViewController methods.

Here are the steps:

  1. Copied all items on the view in the story board and pasted into the new xib view.
  2. Copied all contents of .h and .m view controller files into the new ones for the xib.
  3. Changed the Main nib file base name to the new xib name in the info.plist file.
  4. Tried to change the owner but I don't know if I'm doing that correctly.
  5. Edited the appdelegate didFinishLaunchingWithOptions file as follows:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
     {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;
    
         // Override point for customization after application launch.
    
         TestViewController *test = [[TestViewController alloc]         initWithNibName:@"TestViewController" bundle:nil];
         UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
         self.window.rootViewController = nav;
    
         [self.window makeKeyAndVisible];
    
         return YES;
    }
    
  6. I even tried to start with an empty project like one of the last posts suggested and still get a SIGABRT when I try to run.

Has Apple made it impossible to remove the storyboard? I'm creating an SDK. I don't want a storyboard. But I do need one xib that is rotatable.

Help?

Answer

Jojodmo picture Jojodmo · Oct 23, 2013

You're going to want to create an empty application, then press cmd + n and choose coca touch > objective-c class. name the class RootViewController and leave the subclass alone (UIViewController) then check With XIB for user interface.

Once you've done that, go into your AppDelegate.m file and add the following code under - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions above return: YES

self.RootViewController = [[RootViewController alloc] init];
self.navController = [[UINavigationController alloc] initWithRootViewController:self.RootViewController];
self.navController.navigationBarHidden = YES;
[self.window addSubview:self.navController.view];

So, it should now look like this:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    self.RootViewController = [[RootViewController alloc] init];
    self.navController = [[UINavigationController alloc] initWithRootViewController:self.RootViewController];
    self.navController.navigationBarHidden = YES;
    [self.window addSubview:self.navController.view];
    return YES;
}

then, add #import "RootViewController.h" just below #import "AppDelegate.h". after you do that, go to your AppDelegate.h file, and add @class RootViewController; above the @interface. Then, add the following code under @interface AppDelegate:

@property (strong, nonatomic) RootViewController *RootViewController;
@property (strong, nonatomic) UINavigationController *navController;

So your entire AppDelegate.h should now look like this:

#import <UIKit/UIKit.h>

@class RootViewController;

     @interface AppDelegate : UIResponder <UIApplicationDelegate>


     @property (strong, nonatomic) UIWindow *window;
     @property (strong, nonatomic) RootViewController *RootViewController;
     @property (strong, nonatomic) UINavigationController *navController;

@end

Now that you've done all of this you should be able to start coding your application like you usually would for a xib file! Good luck!