diff --git a/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m b/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m index 2b49d66..957b3f1 100644 --- a/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m +++ b/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m @@ -842,6 +842,11 @@ } #pragma mark - Presentation Delegate +- (void)navigationController:(UINavigationController *)navigationController prepareDisplayForViewController:(UIViewController *)viewController { + if ([self.delegateObject.presentationDelegate respondsToSelector:@selector(navigationController:prepareDisplayForViewController:)]) { + [self.delegateObject.presentationDelegate navigationController:navigationController prepareDisplayForViewController:viewController]; + } +} - (void)navigationController:(UINavigationController *)navigationController willDisplayViewController:(UIViewController *)viewController { diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m index b700005..794975d 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m +++ b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m @@ -213,12 +213,14 @@ - (void)pushViewController { // Although the post animation state is currently fine with push, store anyway as a precaution self.futureViewControllers = [self.navigationObject.navigationController.viewControllers arrayByAddingObject:self.navigationObject.viewController]; + [self navigationController:self.navigationObject.navigationController prepareDisplayForViewController:self.navigationObject.viewController]; [self.navigationObject.navigationController pushViewController:self.navigationObject.viewController animated:self.navigationObject.animated]; } - (void)setViewControllers:(NSArray *)viewControllers { self.futureViewControllers = viewControllers; if (![self.navigationObject.navigationController.viewControllers isEqualToArray:viewControllers]) { + [self navigationController:self.navigationObject.navigationController prepareDisplayForViewController:viewControllers.lastObject]; [self.navigationObject.navigationController setViewControllers:viewControllers animated:self.navigationObject.animated]; } else { @@ -227,6 +229,22 @@ } } +// Notify delegates to prepare for the controller to be added to the navigation controller. +- (void)navigationController:(UINavigationController *)navigationController prepareDisplayForViewController:(UIViewController *)viewController { + + if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:prepareDisplayForViewController:)]) { + [self.delegate navigationController:navigationController + prepareDisplayForViewController:viewController]; + } + + for (NSObject *delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates.allObjects) { + if (delegate && [delegate respondsToSelector:@selector(navigationController:prepareDisplayForViewController:)]) { + [delegate navigationController:navigationController + prepareDisplayForViewController:viewController]; + } + } +} + - (void)markAsFinished { self.navigationObject.navigationController.delegate = nil; if (self.navigationObject.stopLoadingOverlay) { @@ -241,7 +259,6 @@ } #pragma mark - Delegate - - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if (self.navigationObject.stopLoadingOverlay) { [[MVMCoreLoadingOverlayHandler sharedLoadingOverlay] stopLoading:YES]; diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h index 8dc27f4..4ecb774 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h +++ b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentationDelegateProtocol.h @@ -12,6 +12,8 @@ @protocol MVMCorePresentationDelegateProtocol @optional +// Called when a view controller is about to be added to a navigation controller +- (void)navigationController:(nonnull UINavigationController *)navigationController prepareDisplayForViewController:(nonnull UIViewController *)viewController; // Called when a view controller will be displayed on a navigation controller - (void)navigationController:(nonnull UINavigationController *)navigationController willDisplayViewController:(nonnull UIViewController *)viewController;