码迷,mamicode.com
首页 > 其他好文 > 详细

BaseNavigationController自定义导航栏

时间:2017-04-01 15:39:51      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:cto   view   push   class   ble   动画   return   asto   pop   

#import <UIKit/UIKit.h>

 

@interface RCDNavigationViewController : UINavigationController<UIGestureRecognizerDelegate,UINavigationControllerDelegate>

 

@end

 

//  .m

 

#import "RCDNavigationViewController.h"

 

@interface RCDNavigationViewController ()

 

@end

 

@implementation RCDNavigationViewController

 

- (void)viewDidLoad {

  [super viewDidLoad];

 

  __weak RCDNavigationViewController *weakSelf = self;

 

  if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {

    self.interactivePopGestureRecognizer.delegate = weakSelf;

 

    self.delegate = weakSelf;

 

    self.interactivePopGestureRecognizer.enabled = YES;

  }

}

 

- (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;

  }

}

//UIGestureRecognizerDelegate

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

  if ([gestureRecognizer isEqual:self.interactivePopGestureRecognizer] &&

      self.viewControllers.count > 1 &&

      [self.visibleViewController isEqual:[self.viewControllers lastObject]]) {

    //判断当导航堆栈中存在页面,并且 可见视图 如果不是导航堆栈中的最后一个视图时,就会屏蔽掉滑动返回的手势。此设置是为了避免页面滑动返回时因动画存在延迟所导致的卡死。

    return YES;

  } else {

    return NO;

  }

}

 

@end

BaseNavigationController自定义导航栏

标签:cto   view   push   class   ble   动画   return   asto   pop   

原文地址:http://www.cnblogs.com/daxueshan/p/6655759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!