65 votes

Comment accéder à mon viewController depuis mon appDelegate ? iOS

J'ai une application iOS que j'ai créée en tant qu'"application basée sur la vue" dans xCode. Je n'ai qu'un seul viewController, mais il s'affiche automatiquement et je ne vois aucun code qui le lie à mon appDelegate. J'ai besoin de transmettre des données de mon appDelegate à mon viewController, mais je ne sais pas comment y parvenir.

Mon application délégué.h :

 #import <UIKit/UIKit.h>


@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSDictionary *queryStrings;

@end

Aussi, appDidFinishLoadingWithOptions :

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [[JMC sharedInstance] configureJiraConnect:@"https://cmsmech.atlassian.net/"           projectKey:@"WTUPLOAD" apiKey:@"7fc060e1-a795-4135-89c6-a7e8e64c4b13"];

    if ([launchOptions objectForKey:UIApplicationLaunchOptionsURLKey] != nil) {
        NSURL *url = [launchOptions objectForKey: UIApplicationLaunchOptionsURLKey];
        NSLog(@"url received: %@", url);
        NSLog(@"query string: %@", [url query]);
        NSLog(@"host: %@", [url host]);
        NSLog(@"url path: %@", [url path]);
        queryStrings = [self parseQueryString:[url query]];
        NSLog(@"query dictionary: %@", queryStrings);
    }
    else {
        queryStrings = [self parseQueryString:@"wtID=nil"];
    }

    return YES;
}

106voto

utahwithak Points 2845

Vous pouvez y accéder avec :

 MyViewController* mainController = (MyViewController*)  self.window.rootViewController;

Si vous imbriquez votre vue derrière un tabviewcontroller ou un contrôleur de navigation, il vous le renverra et vous devrez accéder à votre contrôleur de vue à l'intérieur.

12voto

Conrad Shultz Points 6502

Puisque vous n'avez qu'un seul contrôleur de vue, la manière générique (indépendamment de la configuration de votre application) :

 UIViewController *vc = [[[UIApplication sharedApplication] keyWindow] rootViewController];

9voto

Arben Pnishi Points 591

Si vous voulez obtenir n'importe quel autre UIViewController , pas seulement le rootViewController :

 UIWindow *window=[UIApplication sharedApplication].keyWindow;
UIViewController *root = [window rootViewController];

UIStoryboard *storyboard = root.storyboard;
CustomViewController *vcc =(CustomViewController *) [storyboard instantiateViewControllerWithIdentifier:@"storyBoardID"];

6voto

Esq Points 498

Un moyen rapide de le faire, vous pouvez l'appeler de n'importe où, pas seulement d'appdelegate :

 /// EZSwiftExtensions - Gives you the VC on top so you can easily push your popups
public var topMostVC: UIViewController? {
    var presentedVC = UIApplication.sharedApplication().keyWindow?.rootViewController
    while let pVC = presentedVC?.presentedViewController {
        presentedVC = pVC
    }

    if presentedVC == nil {
        print("EZSwiftExtensions Error: You don't have any views set. You may be calling them in viewDidLoad. Try viewDidAppear instead.")
    }
    return presentedVC
}

Il est inclus en tant que fonction standard dans :

https://github.com/goktugyil/EZSwiftExtensions

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