diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index 383d923a..fea8aeb9 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -324,6 +324,17 @@ return [self.loadObject.pageJSON lenientBoolForKey:@"showRightPanel"]; } + +- (BOOL)isOverridingRightButton { + return [self.loadObject.pageJSON dict:@"supportLink"]; +} + +- (void)rightPanelButtonPressed { + [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:[self.loadObject.pageJSON dict:@"supportLink"] + additionalData:nil + delegate:self]; +} + - (void)setSupportShouldBeAccessible:(BOOL)supportShouldBeAccessible { MVMCoreUISplitViewController *splitViewController = [MVMCoreUISession sharedGlobal].splitViewController; diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h index 5af78022..4d8657e9 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h @@ -24,6 +24,11 @@ NS_ASSUME_NONNULL_BEGIN // Called when the back button is pressed. Overwrite for special functionality. - (void)backButtonPressed; +- (void)leftPanelButtonPressed; +- (void)rightPanelButtonPressed; +- (BOOL)isOverridingRightButton; +- (BOOL)isOverridingLeftButton; + @end NS_ASSUME_NONNULL_END diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index bd150f59..302d2ca0 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -142,6 +142,19 @@ CGFloat const PanelAnimationDuration = 0.2; - (IBAction)leftPanelButtonPressed:(id)sender { [MVMCoreDispatchUtility performBlockOnMainThread:^{ + UIViewController *viewController = self.navigationController.topViewController; + + // If Viewcontroller confirms to protocol and implements the the method leftPanelButtonPressed + if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)] + && [viewController respondsToSelector:@selector(leftPanelButtonPressed)] + && [viewController respondsToSelector:@selector(isOverridingLeftButton)]) { + + if ([((UIViewController *)viewController) isOverridingLeftButton]) { + [((UIViewController *)viewController) leftPanelButtonPressed]; + return; + } + } + if (self.mainViewLeading.constant < .1) { // Hide the keyboard @@ -153,6 +166,7 @@ CGFloat const PanelAnimationDuration = 0.2; // Hide [self hideLeftPanelIfNeededAnimated:YES]; } + }]; } @@ -169,9 +183,22 @@ CGFloat const PanelAnimationDuration = 0.2; - (IBAction)rightPanelButtonPressed:(id)sender { [MVMCoreDispatchUtility performBlockOnMainThread:^{ + UIViewController *viewController = self.navigationController.topViewController; + + // If Viewcontroller confirms to protocol and implements the the method rightPanelButtonPressed + if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)] + && [viewController respondsToSelector:@selector(isOverridingRightButton)] + && [viewController respondsToSelector:@selector(rightPanelButtonPressed)]) { + + if ([((UIViewController *)viewController) isOverridingRightButton]) { + [((UIViewController *)viewController) rightPanelButtonPressed]; + return; + } + } + if (self.mainViewTrailing.constant < .1) { // Hide the keyboard - [self.navigationController.topViewController.view endEditing:YES]; + [viewController.view endEditing:YES]; // Show [self showRightPanelAnimated:YES];