• ios侧滑返回:完美解决 interactivePopGestureRecognizer 卡住的问题


    interactivePopGestureRecognizer是iOS7推出的解决VeiwController滑动后退的新功能,虽然很实用,但是坑也很多啊(比如在rootViewcontroller下,使用侧滑返回手势,可能就卡住了),这里给出如何完美解决interactivePopGestureRecognizer卡住的问题.

    当然我们要自定义UINavigationController来解决这个问题:

    #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

    转载自:http://adad184.com/2013/12/12/2013-12-12-wan-mei-jie-jue-interactivepopgesturerecognizer-qia-zhu-de-wen-ti/

  • 相关阅读:
    Linux下gdb attach的使用(调试已在运行的进程)
    Linux ps 命令
    SemaphoreFullException when checking user role via ASP.NET membership
    c程序内存分布
    正则表达式
    事务实战感悟
    oracle免客户端安装 plsql连接
    关于tomcat的热部署
    json工具包比较 fastjson jackson gson
    图片 滚动 放大缩小 旋转
  • 原文地址:https://www.cnblogs.com/benbenzhu/p/4365292.html
Copyright © 2020-2023  润新知