iosiOS开发交流iOS Developer

导航控制器的2种滑动返回功能

2016-05-15  本文已影响531人  小小小阿博er

为什么需要自己设置滑动返回?
如何设置呢?
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.viewControllers.count != 0) { // 非根控制器
        // 清空代理后就有滑动返回功能
        self.interactivePopGestureRecognizer.delegate = nil;
}
    [super pushViewController:viewController animated:animated];
}
   //清空之后什么时候还原呢,如果不还原,就会像刚刚说的那样,在根控制器页面一旦在左侧向右滑动了,页面就无法点击了
   //在导航控制器完全pop到根控制器完成的时候还原就可以了,在以下方法还原就可以了  
   //导航控制器完全pop到根控制器完成这个操作导航控制器自己监听最合适,所以要遵守<UINavigationControllerDelegate>这个协议
   //这个时候需要自己监听自己的事情,那么让导航控制器自己成为自己的代理
 - (void)viewDidLoad {
    [super viewDidLoad];
   //用一个id值去记录这个代理,方便在其他方法中操作这个代理
    self.popDelegate = self.interactivePopGestureRecognizer.delegate;
   //自己成为自己的代理,监听完全pop到根控制器
    self.delegate = self;
  }

   - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
  {
       // 如果pop完成的时候展示的是根控制器,那么就还原返回手势代理
       //这个方法中携带的viewController就是pop或者push完成后展示的那个控制器
        if (viewController == [self.viewControllers firstObject]) {
        self.interactivePopGestureRecognizer.delegate = self.popDelegate;  
       }
   }       
上一篇下一篇

猜你喜欢

热点阅读