11
votes

UISTORYboard Obtenir le contrôleur de première vue de l'applicationDelegate

J'ai un protocole que mon applicationDélégate implémente. Je veux transmettre ceci au premier contrôleur d'affichage défini dans une carte d'histoire. Comment puis-je y accéder à partir de la méthode? XXX


0 commentaires

3 Réponses :


22
votes

Je ne suis pas sûr que je comprends la question correctement, je pense que vous vous demandez comment obtenez-vous la première vue de visiteuse dans un storyboard. Pour obtenir cela, vous appelez,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *vc =[storybord instantiateInitialViewController];
    //set the delegate on the view controller that you have loaded
    // Override point for customization after application launch.
    return YES;
}


4 commentaires

Oui c'est ce dont j'avais besoin. Avez-vous une idée de la façon de charger le bon storyboard pour l'appareil dans une application universelle (iPhone vs iPad)?


Cela devrait le faire uiviewcontroller * vc; if (ui_user_interface_idiom () == uiuserinterfaceidiiompad) {utistoryboard * Storybord = [Storyboard d'assurance-emploiWithhname: @ "MainPadstoryboard" Bundle: Nil]; VC = [Storybord InstantikeInitialViewController]; } else {utistoryboard * Storybord = [Storyboard d'assurance-emploiWithName: @ "MainiPhoneStoroard" Bundle: nil]; VC = [Storybord InstantikeInitialViewController]; }


Assurez-vous que cela saisit une nouvelle copie, pas l'existante.


Si vous ne voulez pas que le nom du storyboard ne veuille pas, le nom du storyboard, que Scott Sort Sort sera différent pour iPhone et iPad, le nom est défini dans le fichier Info.Plist, il peut être extrait comme suit: NSString * StoryboardName = [[NsBundle MainBundle] .Infodidictiongy ObjectForkey: @ "UIMainStoryboardFile"]; auto.storyboard = [Storyboard d'assurance-emploiWithName: Bundle de scénario: [Nsbundle MainBundle]];



14
votes

Plutôt, créant ainsi une nouvelle copie de votre storyboard existant à l'aide de

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.initialViewController = self.window.rootViewController;

    return YES;
}


1 commentaires

Cela fonctionne et est la bonne réponse; L'instanciation d'un nouveau contrôleur n'est pas la même que de pointer sur l'un déjà instancié du scénario.



-2
votes

SWIFT 2.0 Mise en œuvre pour ceux qui voulaient.

Vous devrez modifier l'identificateur de la vue Stroybaord et du contrôleur. Aussi o xxx


5 commentaires

Essayez de comprendre le problème au lieu de simplement convertir la réponse acceptée dans Swift ...


@Martin j'ai édité la réponse. J'espère même qu'un débutant d'iOS peut comprendre maintenant.


Mais vos solutions créent un nouveau contrôleur d'affichage tandis que le @arran recherchait une solution pour obtenir le contrôleur de première vue existant. La réponse actuellement acceptée n'est pas une bonne réponse.


@Martin La réponse actuellement acceptée n'est pas ma réponse. C'est par Scott Sherwood. Si la réponse correcte n'est pas une bonne chose, pourquoi n'ajoutez-vous pas la bonne réponse que de commenter des autres réponses. Aussi comment vous déssidiez des anwers pour un autre problemum? Seul le problème de la question (Aran Mulholland) peut la marquer comme une réponse correcte. Aran Mulholland a marqué la réponse comme correcte parce que la solution fonctionne pour lui.


Parce que la bonne réponse est déjà ici (voir @pettajger One) et a été postée 2 ans après la demande de la question. Peut-être que l'astucieux a accepté l'accepté parce qu'il n'y avait pas de meilleure réponse à ce moment-là. Aranmulholland veut, dans sa question initiale, d'obtenir la première instance de contrôleur d'affichage existante. Donner un nouvellement créé dans ce contexte ne serait pas logique.