diff --git a/SASlideMenu/ExampleDynamicMenuViewController.m b/SASlideMenu/ExampleDynamicMenuViewController.m index 2c43cd9..8bd57fa 100644 --- a/SASlideMenu/ExampleDynamicMenuViewController.m +++ b/SASlideMenu/ExampleDynamicMenuViewController.m @@ -95,19 +95,15 @@ -(NSString*) segueIdForIndexPath:(NSIndexPath *)indexPath{ } -(Boolean) slideOutThenIn{ - return NO; + return YES; } //Disable caching for the controller at the first row of each section -(Boolean) disableContentViewControllerCachingForIndexPath:(NSIndexPath *)indexPath{ - if (indexPath.row ==0) { - return YES; - } - return NO; + return YES; } //Enable the right menu for the the view controller in the first section -(Boolean) hasRightMenuForIndexPath:(NSIndexPath *)indexPath{ - return YES; } @@ -183,7 +179,7 @@ -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } #pragma mark - #pragma mark SASlideMenuDelegate - +/* -(void) slideMenuWillSlideIn:(UINavigationController *)selectedContent{ NSLog(@"slideMenuWillSlideIn"); } @@ -208,4 +204,5 @@ -(void) slideMenuWillSlideToLeft:(UINavigationController *)selectedContent{ -(void) slideMenuDidSlideToLeft:(UINavigationController *)selectedContent{ NSLog(@"slideMenuDidSlideToLeft"); } + */ @end diff --git a/SASlideMenu/SASlideMenu/SASlideMenuContentSegue.m b/SASlideMenu/SASlideMenu/SASlideMenuContentSegue.m index 62fb642..669de54 100644 --- a/SASlideMenu/SASlideMenu/SASlideMenuContentSegue.m +++ b/SASlideMenu/SASlideMenu/SASlideMenuContentSegue.m @@ -58,28 +58,29 @@ -(void) perform{ layer.shadowPath =[UIBezierPath bezierPathWithRect:layer.bounds].CGPath; } - [rootController switchToContentViewController:destination]; - - if ([rootController.leftMenu.slideMenuDataSource respondsToSelector:@selector(segueIdForIndexPath:)]) { - [rootController addContentViewController:destination withIndexPath:selectedIndexPath]; - } + [rootController switchToContentViewController:destination completion:^{ + if ([rootController.leftMenu.slideMenuDataSource respondsToSelector:@selector(segueIdForIndexPath:)]) { + [rootController addContentViewController:destination withIndexPath:selectedIndexPath]; + } + + //We do that after switchToContentViewController. + //because we need destination.parentViewController to be initialized. + if (hasRightMenu) { + [destination performSegueWithIdentifier:@"rightMenu" sender:rootController]; + } + + Boolean disablePanGesture= NO; + if ([rootController.leftMenu.slideMenuDataSource respondsToSelector:@selector(disablePanGestureForIndexPath:)]) { + disablePanGesture = [rootController.leftMenu.slideMenuDataSource disablePanGestureForIndexPath:selectedIndexPath]; + } + if (!disablePanGesture) { + UIPanGestureRecognizer* panGesture= [[UIPanGestureRecognizer alloc] initWithTarget:rootController action:@selector(panItem:)]; + [panGesture setMaximumNumberOfTouches:2]; + [panGesture setDelegate:source]; + [destination.view addGestureRecognizer:panGesture]; + } + }]; - //We do that after switchToContentViewController. - //because we need destination.parentViewController to be initialized. - if (hasRightMenu) { - [destination performSegueWithIdentifier:@"rightMenu" sender:rootController]; - } - - Boolean disablePanGesture= NO; - if ([rootController.leftMenu.slideMenuDataSource respondsToSelector:@selector(disablePanGestureForIndexPath:)]) { - disablePanGesture = [rootController.leftMenu.slideMenuDataSource disablePanGestureForIndexPath:selectedIndexPath]; - } - if (!disablePanGesture) { - UIPanGestureRecognizer* panGesture= [[UIPanGestureRecognizer alloc] initWithTarget:rootController action:@selector(panItem:)]; - [panGesture setMaximumNumberOfTouches:2]; - [panGesture setDelegate:source]; - [destination.view addGestureRecognizer:panGesture]; - } } @end diff --git a/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.h b/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.h index 39153cc..09482c3 100644 --- a/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.h +++ b/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.h @@ -19,7 +19,7 @@ @property (nonatomic,assign) Boolean isRightMenuEnabled; @property (nonatomic,strong) SASlideMenuNavigationController* navigationController; --(void) switchToContentViewController:(UINavigationController*) content; +-(void) switchToContentViewController:(UINavigationController*) content completion:(void (^)(void))completion; -(void) addContentViewController:(UIViewController*) content withIndexPath:(NSIndexPath*)indexPath; -(void) popRightNavigationController; diff --git a/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.m b/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.m index fc90f47..8f38f28 100644 --- a/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.m +++ b/SASlideMenu/SASlideMenu/SASlideMenuRootViewController.m @@ -250,7 +250,7 @@ -(void) tapShield:(UITapGestureRecognizer*)gesture{ [self doSlideIn:nil]; } -(void) tapItem:(UITapGestureRecognizer*)gesture{ - [self switchToContentViewController:self.selectedContent]; + [self switchToContentViewController:self.selectedContent completion:nil]; } -(void) panItem:(UIPanGestureRecognizer*)gesture{ @@ -340,7 +340,7 @@ -(UINavigationController*) controllerForIndexPath:(NSIndexPath*) indexPath{ return [controllers objectForKey:indexPath]; } --(void) switchToContentViewController:(UINavigationController*) content{ +-(void) switchToContentViewController:(UINavigationController*) content completion:(void (^)(void))completion{ CGRect bounds = self.view.bounds; self.view.userInteractionEnabled = NO; if ([self.leftMenu.slideMenuDataSource respondsToSelector:@selector(prepareForSwitchToContentViewController:)]) { @@ -364,8 +364,12 @@ -(void) switchToContentViewController:(UINavigationController*) content{ [self addChildViewController:content]; [self.view addSubview:content.view]; self.selectedContent = content; + [NSThread sleepForTimeInterval:1.0]; [self doSlideIn:^(BOOL slideInCompleted) { [content didMoveToParentViewController:self]; + if(completion){ + completion(); + } self.view.userInteractionEnabled = YES; }]; }]; @@ -379,6 +383,9 @@ -(void) switchToContentViewController:(UINavigationController*) content{ self.selectedContent = content; [self doSlideIn:^(BOOL completed) { [content didMoveToParentViewController:self]; + if(completion){ + completion(); + } self.view.userInteractionEnabled = YES; }]; } @@ -405,8 +412,10 @@ -(void) switchToContentViewController:(UINavigationController*) content{ [self.leftMenu.slideMenuDelegate slideMenuDidSlideIn:self.selectedContent]; } [content didMoveToParentViewController:self]; + if(completion){ + completion(); + } self.view.userInteractionEnabled = YES; - } } diff --git a/SASlideMenu/SASlideMenu/SASlideMenuViewController.m b/SASlideMenu/SASlideMenu/SASlideMenuViewController.m index e81bc46..d09b114 100644 --- a/SASlideMenu/SASlideMenu/SASlideMenuViewController.m +++ b/SASlideMenu/SASlideMenu/SASlideMenuViewController.m @@ -43,7 +43,7 @@ - (void)loadContentAtIndexPath:(NSIndexPath*)indexPath { if ([self.slideMenuDataSource respondsToSelector:@selector(segueIdForIndexPath:)]) { UINavigationController* controller = [self.rootController controllerForIndexPath:indexPath]; if (controller) { - [self.rootController switchToContentViewController:controller]; + [self.rootController switchToContentViewController:controller completion:nil]; return; } NSString* segueId = [self.slideMenuDataSource segueIdForIndexPath:indexPath]; diff --git a/SASlideMenuDynamic/en.lproj/MainStoryboard.storyboard b/SASlideMenuDynamic/en.lproj/MainStoryboard.storyboard index 0f6497e..9267ba9 100644 --- a/SASlideMenuDynamic/en.lproj/MainStoryboard.storyboard +++ b/SASlideMenuDynamic/en.lproj/MainStoryboard.storyboard @@ -562,54 +562,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -