14 votes

Chargement de l'UIStoryboard à partir du délégué de l'application

J'essaie de charger un UIStoryboard à partir du délégué de l'application .m de cette manière :

- (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;
}

Quel est le problème avec ce code ? une idée ?

33voto

martinezdelariva Points 1525
- (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;
}

Essayez ceci. Je pense qu'il manque le contrôleur de vue racine et la visibilité des fenêtres.

4voto

Eugene Points 661

Pour Swift 4.2 et plus.

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
}

2voto

andyPaul Points 1650

D'après votre code, l'objet UIWindow n'est pas initialisé.

Vous devez l'initialiser si vous ne mentionnez pas de nom de storyboard dans la rubrique App-Info.plist .

Il faut également que la fenêtre soit visible et qu'elle joue un rôle clé. Veuillez modifier votre code comme indiqué ci-dessous :

- (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;
}

-2voto

Fogmeister Points 21187

Ce n'est plus le cas aujourd'hui.

Dans la plist des paramètres de construction, il y a une entrée pour Main Storyboard (ou quelque chose comme ça). Tout ce dont vous avez besoin dans l'applicationDidFinishLoading est de renvoyer YES ;

Si vous démarrez un nouveau projet avec les storyboards cochés, vous pouvez voir l'entrée exacte.

Si c'est le cas, il n'est pas nécessaire de charger la vue initiale, car elle provient du fichier storyboard (indicateur "Vue initiale").

HTH

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X