第一种情况:
从A页面push
到B页面,B页面再push
到C页面,其中B页面只是一个过渡页,在C页面返回的时候直接返回到A页面。解决方法如下:
- (void)pushCategoryDetailViewController
{
CategoryDetailViewController *categoryDetailVC = Storyboard(@"Main", @"CategoryDetailViewController");
[self.navigationController pushViewController:categoryDetailVC animated:YES];
//手势返回里直接返回到上一个页面,例如A push B,B push C的时候把B移除,在C页面手势直接返回到A
NSMutableArray *mArray = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
if (self.navigationController.viewControllers.count > 1) {
[mArray removeObject:self];
}
self.navigationController.viewControllers = mArray;
}
第二种情况:
从A页面push
到B页面,B页面present
到C页面,C页面再push
到D页面,在D页面手势返回到A页面。解决方法如下:
- 在B页面
present
到C页面的时候,B页面先present
到C页面,然后B页面再pop
到A页面(这种情况下把animation
设置成false
,否则会有一个一闪而过的动画,体验不是太好)。
PayViewController *payVC = Storyboard(@"Main", @"PayViewController");
UINavigationController *navigatoinController = [[UINavigationController alloc] initWithRootViewController:payVC];
[self presentViewController:navigatoinController animated:true completion:nil];
[self.navigationController popViewControllerAnimated:false];
- 在C页面
push
到D页面的时候,先获取到present
之前的navigationController
,用这个navigationController
再push
到D页面,然后再将C页面dismiss
掉
OrderStatusTableViewController *orderStatusVC = Storyboard(@"Main", @"OrderStatusTableViewController");
orderStatusVC.hidesBottomBarWhenPushed = true;
UINavigationController *navigation = [[AppDelegate sharedAppDelegate].tabbarController selectedViewController];
[navigation pushViewController:orderStatusVC animated:YES];
[self dismissViewControllerAnimated:false completion:nil];
番外篇
- 获取边缘手势,自己添加一个手势替代系统的返回手势
UIScreenEdgePanGestureRecognizer *screenEdge = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(onScreenEdge)];
screenEdge.edges = UIRectEdgeLeft; [self.navigationController.interactivePopGestureRecognizer requireGestureRecognizerToFail:screenEdge];
[self.view addGestureRecognizer:screenEdge];
网友评论