美文网首页iOS软件开发
手势返回功能的一些页面处理

手势返回功能的一些页面处理

作者: Minoz_min | 来源:发表于2016-05-29 10:26 被阅读352次

    第一种情况:

    从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,用这个navigationControllerpush到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];
    

    相关文章

      网友评论

        本文标题:手势返回功能的一些页面处理

        本文链接:https://www.haomeiwen.com/subject/mtkqdttx.html