简体   繁体   中英

Presenting ViewController from appDelegate

I need to show a ViewController from the appDelegate every time the app comes from the background in the applicationDidEnterBackground method.

The *securityCheck prompts the user for a passcode very much like the normal passcode in iOS. Once the passcode is validated I call dimissViewControllerAnimated inside the securityCheck and I am left with my blank UINavigationController, since the view was presented from the appDelegate I have no record of who presented the view, so I can't popToRootViewController.

My question is how can I properly dismiss the SecurityCheckViewController so that it shows the ViewController which the user was on before the app entered the background.

Here's my code:

This method is called inside AppDelegate.m

- (void)securityCheck {

   SecurityCheckViewController *securityCheck = [[SecurityCheckViewController alloc] init];
   UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:securityCheck];

   [securityCheck presentedByAppDelegate:YES];

   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   [self.window setRootViewController:navigationController];
   [self.window makeKeyAndVisible];
}

Then inside the SecurityCheckViewController.m I have

- (void)unlockWasSuccessfulForPadLockScreenViewController:(ABPadLockScreenViewController *)padLockScreenViewController {

    [self.appDelegate securityCheckDone];
    [padLockScreenViewController dismissViewControllerAnimated:YES completion:nil];

     NSLog(@"Sucsessfull Unlock");I'm 
}

Present

- (void)securityCheck {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    SecurityCheckViewController *securityCheck = [storyboard instantiateViewControllerWithIdentifier:@"securityCheckView"];
    [self.window.rootViewController presentViewController:securityCheck animated:NO completion:nil];
}

Dismiss

[self dismissViewControllerAnimated:YES completion:nil];

You can call this from application:didFinishLaunchingWithOptions

NOTE: All the storyBoard "initialViewControllers" tick box on the property inspector is turned off

    UIStoryboard *storyboard = 
        [UIStoryboard storyboardWithName:@"Registration" bundle:nil];

    RegisterViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"RegisterViewController"];

    //this is key else you get a black screen
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM