Alessandro
Alessandro

Reputation: 4110

UIStoryboard load from app delegate

I am trying to load a UIStoryboard from the app delegate .m in this way:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
    UIViewController *vc =[storybord instantiateInitialViewController];
    [self.window addSubview:vc.view];

    return YES;
}

What is the problem with this code?? any idea?

Upvotes: 14

Views: 13841

Answers (4)

NNikN
NNikN

Reputation: 3852

From your code I see UIWindow object is not initialised.

You need to initialise it if you don't mention any Storyboard Name in App-Info.plist.

Also, make the Window key and visible. Please change your code as displayed below:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
    UIViewController *vc =[storybord instantiateInitialViewController];
    [self.window addSubview:vc.view];
    [self.window makeKeyAndVisible];
    return YES;
}

Upvotes: 2

Yevhen
Yevhen

Reputation: 1068

For Swift 4.2 and higher.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: Bundle.main)
    let viewController = storyboard.instantiateInitialViewController()
    window?.rootViewController = viewController
    window?.makeKeyAndVisible()
    return true
}

Upvotes: 4

martinezdelariva
martinezdelariva

Reputation: 5049

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

   UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
   UIViewController *vc =[storyboard instantiateInitialViewController];

   // Set root view controller and make windows visible
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   self.window.rootViewController = vc;
   [self.window makeKeyAndVisible];

   return YES;
}

Try this. I think is missing set root view controller and make windows visible.

Upvotes: 33

Fogmeister
Fogmeister

Reputation: 77651

It doesn't work this way now.

In the build settings plist there is add an entry for Main Storyboard (or something like that). The all you need in the applicationDidFinishLoading is return YES;

If you start a new project with storyboards ticked you can see the exact entry.

When that's in there you don't need to load the initial view as it takes it from the storyboard file (Is Initial View flag).

HTH

Upvotes: -2

Related Questions