I created the side menu structure using the SWReveal view controller.What I want to do is to cancel the opening of the right-side view controller on some pages.I have researched and found something like this:
- (BOOL)revealControllerPanGestureShouldBegin:(SWRevealViewController *)revealController
if([revealController.frontViewController isKindOfClass:[UINavigationController class]]){
UINavigationController *navController = (UINavigationController *)revealController.frontViewController;
UIViewController *lastViewController = navController.viewControllers.lastObject;
if([lastViewController isKindOfClass:[DetailViewController class]] ||
[lastViewController isKindOfClass:[TableDateViewController class]] ||
[lastViewController isKindOfClass:[MapViewController class]])
{
return NO; // I do not want to open it for the view controllers I want
}
}
return YES;
}
This worked for me,but it also affected the opening of the left page.There is no problem with the touch action(tap gesture),but this applies to the pan gesture.I mean the pan gesture does not work for the view controller I want to run.I want to work correctly for some view controller,but I do not want to affect the left side. I added the right toggle like this:
-(void)sideRightMenuLoad{
[((PersonelViewController *)[self.navigationController.viewControllers objectAtIndex:0]).view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
SWRevealViewController *revealViewController = self.revealViewController;
if(revealViewController){
[self.sideRightBarButton setTarget:self.revealViewController];
[self.sideRightBarButton setAction:@selector(rightRevealToggle:)];
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}
This code needs to work to open the right-side page:
[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
I tried to run it when I wanted it, but it did not work. I am waiting for help in this regard.Thank you.
You have to check the pan gesture's direction:
- (BOOL)revealControllerPanGestureShouldBegin:(SWRevealViewController *)revealController {
if ([revealController.panGestureRecognizer velocityInView:revealController.view].x < 0) {
// pan direction left, should open right side
// ...
return NO;
}
return YES;
}