iOS 完美解決 interactivePopGestureRecognizer 卡住的問題,電腦卡住了怎麼解決
interactivePopGestureRecognizer
是iOS7推出的解決VeiwController
滑動後退的新功能,雖然很實用,但是坑也很多啊,用過的同學肯定知道問題在哪裡,所以具體問題我就不描述了,這裡只給出如何完美解決interactivePopGestureRecognizer
卡住的問題.
當然我們要自訂UINavigationController來解決這個問題:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#import "MMNavController.h"
@interface MMNavController () { }
@end
@implementation MMNavController
- (id)initWithRootViewController:(UIViewController *)rootViewController { self = [super initWithRootViewController:rootViewController]; if (self) { // Custom initialization } return self; }
- (void)viewDidLoad { __weak MMNavController *weakSelf = self; if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.delegate = weakSelf; self.delegate = weakSelf; } }
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if ( [self respondsToSelector:@selector(interactivePopGestureRecognizer)] && animated == YES ) { self.interactivePopGestureRecognizer.enabled = NO; } [super pushViewController:viewController animated:animated]; }
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated { if ( [self respondsToSelector:@selector(interactivePopGestureRecognizer)] && animated == YES ) { self.interactivePopGestureRecognizer.enabled = NO; } return [super popToRootViewControllerAnimated:animated]; }
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated { if( [self respondsToSelector:@selector(interactivePopGestureRecognizer)] ) { self.interactivePopGestureRecognizer.enabled = NO; } return [super popToViewController:viewController animated:animated]; }
#pragma mark UINavigationControllerDelegate
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animate { if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.enabled = YES; } }
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if ( gestureRecognizer == self.interactivePopGestureRecognizer ) { if ( self.viewControllers.count < 2 || self.visibleViewController == [self.viewControllers objectAtIndex:0] ) { return NO; } } return YES; } @end
|