diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index 383d923a..cd245630 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -324,6 +324,19 @@ return [self.loadObject.pageJSON lenientBoolForKey:@"showRightPanel"]; } + +- (BOOL)isOverridingRightButton { + NSDictionary *rightPanelLinkDict = [self.loadObject.pageJSON dict:@"rightPanelButtonLink"]; + if (rightPanelLinkDict) { + [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:rightPanelLinkDict + additionalData:nil + delegate:self]; + return YES; + } else { + return NO; + } +} + - (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..0c5a865d 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h @@ -24,6 +24,12 @@ NS_ASSUME_NONNULL_BEGIN // Called when the back button is pressed. Overwrite for special functionality. - (void)backButtonPressed; +// View Controller can override this method and do custom action instead of opening the right panel +- (BOOL)isOverridingRightButton; + +// View Controller can override this method and do custom action instead of opening the left panel +- (BOOL)isOverridingLeftButton; + @end NS_ASSUME_NONNULL_END diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index bd150f59..7dfb97e0 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -142,11 +142,18 @@ 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(isOverridingLeftButton)] + && [((UIViewController *)viewController) isOverridingLeftButton]) { + return; + } + if (self.mainViewLeading.constant < .1) { - // Hide the keyboard - [self.navigationController.topViewController.view endEditing:YES]; - + [viewController.view endEditing:YES]; // Show [self showLeftPanelAnimated:YES]; } else { @@ -169,10 +176,18 @@ 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)] + && [((UIViewController *)viewController) isOverridingRightButton]) { + return; + } + if (self.mainViewTrailing.constant < .1) { // Hide the keyboard - [self.navigationController.topViewController.view endEditing:YES]; - + [viewController.view endEditing:YES]; // Show [self showRightPanelAnimated:YES]; } else {