技术日常

ios18~navigationController侧滑返回

2018-07-02  本文已影响30人  摹喵居士

2018.07.02

UINavigationController实现侧滑返回

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = [[BaseNav alloc] init];
[self.window makeKeyAndVisible];
@interface BaseNav ()<UINavigationControllerDelegate,UIGestureRecognizerDelegate>

@end
//UIGestureRecognizerDelegate
self.interactivePopGestureRecognizer.delegate = self;

//UINavigationControllerDelegate
self.delegate = self;
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    
    //push 时关闭手势响应
    self.interactivePopGestureRecognizer.enabled = NO;
    
    [super pushViewController:viewController animated:animated];
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    
    if (navigationController.viewControllers.count == 1) {
        //如果是 rootViewController 就关闭手势响应
        self.interactivePopGestureRecognizer.enabled = NO;
    }
    else{
        //如果不是 rootViewController 就开启手势响应
        self.interactivePopGestureRecognizer.enabled = YES;
    }
}

#import <UIKit/UIKit.h>

@interface BaseNav : UINavigationController

@end

#import "BaseNav.h"

@interface BaseNav ()<UINavigationControllerDelegate,UIGestureRecognizerDelegate>

@end

@implementation BaseNav

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //UIGestureRecognizerDelegate
    self.interactivePopGestureRecognizer.delegate = self;
    
    //UINavigationControllerDelegate
    self.delegate = self;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    
    //push 时关闭手势响应
    self.interactivePopGestureRecognizer.enabled = NO;
    
    [super pushViewController:viewController animated:animated];
}

#pragma mark - UINavigationControllerDelegate

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    
    if (navigationController.viewControllers.count == 1) {
        //如果是 rootViewController 就关闭手势响应
        self.interactivePopGestureRecognizer.enabled = NO;
        self.interactivePopGestureRecognizer.delegate = nil;
    }
    else{
        //如果不是 rootViewController 就开启手势响应
        self.interactivePopGestureRecognizer.enabled = YES;
        self.interactivePopGestureRecognizer.delegate = self;
    }
}

@end

上一篇下一篇

猜你喜欢

热点阅读