web-dev-qa-db-fra.com

Définissez par programme rootViewcontroller pour UINavigationcontroller dans Storyboard dans Appdelegate

J'ai une valeur dans NSUserdefaults. J'utilise storyboard, il est intégré dans UINavigationController.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
     if([[NSUserDefaults standardUserDefaults]objectForKey:@"isLoggedIn"]){
         //show home page here
        }else{
           // show login view
        }
}

Je peux également ouvrir l'application à l'aide d'un URL

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
         NSString *text = [[url Host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

         if(text.length > 0){
           // show home page 

         }else {
          // show settings page
        }

        return YES;
}

Comment puis-je définir le rootViewController pour le UINavigationController en fonction de la valeur récupérée. Quelqu'un peut-il m'aider?

11
Aswathy Bose

Vous pouvez créer un objet UINavigationController avec votre ViewController selon la condition if/else et définir le contrôleur de navigation comme propriété rootViewController de la fenêtre dans AppDelegate comme suit:

LoginViewController *loginController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"loginController"]; //or the homeController
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:loginController];
self.window.rootViewController = navController;
31
dispatchMain

C'est ce que j'ai utilisé dans mon code

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    // Get user preference
 NSString * wxyz=[defaults stringForKey:@"wxyz"];
    //Get value at wxyz field

if ([self isInValidwxyz:wxyz]) {
    //check if wxyz is invalid
    //If wxyz is invalid, write custom code
}
else{
    //if valid, 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryBoardiPhone" bundle:nil];
        self.window.rootViewController = [storyboard instantiateInitialViewController];
    }
    else{

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryBoardiPad" bundle:nil];
        self.window.rootViewController = [storyboard instantiateInitialViewController];;
    }
    [self.window makeKeyAndVisible];
}

puis passez par cette link pour l'implémentation avec le contrôleur de navigation

2
Prince Agrawal