前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >推送跳转到N级界面 返回那些事

推送跳转到N级界面 返回那些事

作者头像
developerbfl
发布2018-06-05 15:23:35
5180
发布2018-06-05 15:23:35
举报
文章被收录于专栏:iOS 开发iOS 开发

有没有开发的童鞋和我一样遇到过这样的需求: 正常进入APP时跳转逻辑是这样的 A push to ----> B push to ----> C C pop to ----> B pop to ----> A 或者 C pop to ----> A

123.gif

推送点击跳转产品要求是这样的 场景N.01 ==> 假如APP 退到后台是在A界面(以A界面为rootVC)点击推送直接跳转到C界面,然后C点击返回返回到B界面,B再返回A界面。

234.gif

场景N.02 ==> 假如APP 退到后台是在B界面(以A界面为rootVC)点击推送直接跳转到C界面,然后C点击返回返回到B界面,B再返回A界面。

345.gif

场景N.03 ==> 假如APP 退到后台是在C界面(以A界面为rootVC)点击推送直接跳转到C界面,然后C点击返回返回到B界面,B再返回A界面。

678.gif

以上是简单的场景介绍及演示。 我的做法如下 在三级界面C控制器的返回事件中这样做

代码语言:javascript
复制
- (void)backButtonAction {

    UINavigationController *navigationController = self.navigationController;
    NSMutableArray<__kindof UIViewController *> *tempViewControllers = [NSMutableArray arrayWithArray:navigationController.viewControllers];

    //TODO: 判断栈中是否含有B控制器   如果没有就添加B控制器
    BOOL canAddBVC = YES;
    for(UIViewController*controller in self.navigationController.viewControllers) {
        if([controller isKindOfClass:[BViewController class]]) {
            canAddBVC = NO;
        }
    }
    
    //TODO: 添加B 控制器到第二级
    if (canAddBVC) {
        BViewController *tempBVC = [BViewController new];
        [tempViewControllers insertObject:tempBVC atIndex:1];
        navigationController.viewControllers = tempViewControllers;
    }
    
    
    //TODO: 判断自身控制器在栈中的个数    个数多于一个则移除先入栈的自身
    int selfCountInViewControllers = 0;
    for(UIViewController*controller in tempViewControllers) {
        if([controller isKindOfClass:[CViewController class]]) {
            selfCountInViewControllers++;
        }
    }
    
    //TODO: 移除先入栈的自身
    if (selfCountInViewControllers > 1) {
        [tempViewControllers removeObjectAtIndex:tempViewControllers.count - 2];
        navigationController.viewControllers = tempViewControllers;
    }

    [navigationController popToViewController:navigationController.viewControllers[1] animated:YES];
}

我不知道这样操作栈中元素会不会不合适 所以发出来供大家参考一下,有大神有好的见解还请赐教。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.07.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档