How to present View Controller modally at application launch?

I created a screen that ONLY appears on the first start of my application; It works great. However, I would like to present this screen modulo on top of my root view controller (EditorsNoteViewController is the screen that I want to present modally at the first start). Does anyone know how I will do this? Here is what I still have:

Appdelegate.m

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
        {
            self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
            if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
            {
                NSLog(@"not first launch");

                      self.viewController = [[UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"articlesNav"];
                self.window.rootViewController = self.viewController;

            }
            else
            {
                [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
                [[NSUserDefaults standardUserDefaults] synchronize];



                self.viewController = [[UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"articlesNav"];
                self.window.rootViewController = self.viewController;


     EditorsNoteViewController *vc = [[EditorsNoteViewController alloc]init];
             [self.viewController.navigationController presentViewController:vc animated:YES completion:nil];

}
                [self.window makeKeyAndVisible];
    return YES;
}
+4
source share
3 answers

I realized that you have to call

[self.window makeKeyAndVisible];

before view controller view

+5
source

, EditorsNoteViewController , :

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
EditorsNoteViewController *vc = (EditorsNoteViewController*)[storyboard instantiateViewControllerWithIdentifier:@"EditorsNoteOrWhateverIdentifierYouChose"];

NSUser? RootViewController -viewDidLoad, , UIViewController ( AppDelegate).

, -viewDidAppear -viewDidLoad.

0

. ( - ) , , , . , , /.

:

@implementation ContainerViewController {
    NSMutableArray* stack;
}

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        stack = [NSMutableArray new];
    }
    return self;
}

- (void) pushViewController:(UIViewController*) viewController {
    UIViewController* currentViewController = [stack lastObject];
    [stack addObject:viewController];
    if (self.isViewLoaded) {
        [self addChildViewController:viewController];
        [currentViewController willMoveToParentViewController:nil];
        viewController.view.frame = CGRectOffset(self.view.bounds, 0, self.view.bounds.size.height);
        [self transitionFromViewController:currentViewController toViewController:viewController duration:0.3   options:kNilOptions animations:^{
            viewController.view.frame = self.view.bounds;
        } completion:^(BOOL finished) {
            [viewController didMoveToParentViewController:self];
            [currentViewController removeFromParentViewController];
        }];
    }
}

- (void) popViewController {
    UIViewController* currentViewController = [stack lastObject];
    [stack removeLastObject];
    if (self.isViewLoaded) {
        UIViewController* viewController = [stack lastObject];
        [self addChildViewController:viewController];
        [currentViewController willMoveToParentViewController:nil];
        [self transitionFromViewController:currentViewController toViewController:viewController duration:0.3   options:kNilOptions animations:^{
            [self.view sendSubviewToBack:viewController.view];
            currentViewController.view.frame = CGRectOffset(self.view.bounds, 0, self.view.bounds.size.height);
        } completion:^(BOOL finished) {
            [viewController didMoveToParentViewController:self];
            [currentViewController removeFromParentViewController];
        }];
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UIViewController* viewController = [stack lastObject];
    [self addChildViewController:viewController];
    [self.view addSubview:viewController.view];
    [viewController didMoveToParentViewController:self];
}

@end

AppDelegate - :

ContainerViewController* viewController = [ContainerViewController new];
[viewController pushViewController: [RootViewController new];

if ([self shouldPresentModalViewController]) {
    [viewController pushViewController: [ModalViewController new];
}

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

- , :

[((ContainerViewController*) self.parentViewController) popViewController];
0

All Articles