为UINavigationController添加右滑Pop、左滑Push出ViewController的功能,集成非常简单.
使用or继承Demo中提供的`PanNavigationController`即可
因为右滑返回功能是默认开启的,如果需要在某一个页面关闭,需要在此Controller
的生命周期方法中设置,但因为UINavigationController
是全局的,所以在此Controller
消失的时候再设置打开,因为其他Controller
很有可能会使用此功能(用户亦可根据自己的使用场景设置开启or关闭时机)
//关闭右滑返回功能
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
PanNavigationController *nav = (PanNavigationController *)self.navigationController;
nav.isForbidDragBack = YES;
}
//开启右滑返回功能
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
PanNavigationController *nav = (PanNavigationController *)self.navigationController;
nav.isForbidDragBack = NO;
}
此功能是参照网易新闻App
在新闻详情页
,左滑push出评论列表页面
的实现方式.
因为在UINavigationController
导航堆栈中,我们根本不知道即将push出的是哪一个Controller
,so,在某个Controler
中要使用此功能时,必须设置delegate
,并实现其代理方法,指定其左滑push出的新的Controller
.
@interface SecondViewController ()<PanPushToNextViewControllerDelegate>
既然UINavigationController
是全局的,所以在此Controller
消失的时候需要关闭此功能(用户亦可根据自己的使用场景设置开启or关闭时机)
//开启左滑push功能,设置代理,实现其代理方法
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
PanNavigationController *nav = (PanNavigationController *)self.navigationController;
[nav setNextViewControllerDelegate:self];
}
//关闭左滑push
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
PanNavigationController *nav = (PanNavigationController *)self.navigationController;
[nav setNextViewControllerDelegate:nil];
}
指定通过左滑push功能推出的新的Controller
#pragma mark -- PanSwiper Delegate --
- (UIViewController *)swiperBeginPanPushToNextController:(PanSwiper *)swiper
{
FirstViewController *controller = [[FirstViewController alloc] initWithNibName:NSStringFromClass([FirstViewController class]) bundle:nil];
return controller;
}