美文网首页iOS自我学习库
iOS实现先无动画pop再push,替换当前控制器

iOS实现先无动画pop再push,替换当前控制器

作者: 冰点雨 | 来源:发表于2017-05-19 14:54 被阅读352次

    iOS实现先无动画pop再push,替换当前控制器

    1.先pop 发送通知或代理在前一个页面执行push操作

    iOS开发中会遇到添加成功,发送成功……类似情况,需要先将push前的页面移除调。如果直接调用pop,立刻去push。如果这两个命令写在同一个控制器中,则会发现push根本没有被执行……因为pop已经将该控制器移除,push根本没有机会执行。也可以在上一个控制器通过代理/通知/闭包等操作。

    这种方法有弊端,有可能会push多次不等。页面交互非常不好。

    2.改变控制器在栈中的位置
    所以就选择了下面的方法,先移除路由栈中当前控制器,再新增新的控制器,最后赋值。

      // 新建将要push的控制器
            MyGroupDetailViewController *detail = [[MyGroupDetailViewController alloc]init];
            detail.groupId = groupId;
            // 获取当前路由的控制器数组
            NSMutableArray *vcArray = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
            // 打印当前路由的控制器数组
            NSLog(@"1==the vcArray is %@", vcArray);
            // 获取档期控制器在路由的位置
            int index = (int)[vcArray indexOfObject:self];
            // 移除当前路由器
            [vcArray removeObjectAtIndex:index];
            NSLog(@"2==the vcArray is %@", vcArray);
            // 添加新控制器
            [vcArray addObject: detail];
            // 打印新增后的控制器数组
            NSLog(@"3==the vcArray is %@", vcArray);
            // 重新设置当前导航控制器的路由数组
            [self.navigationController setViewControllers:vcArray animated:YES];
    

    相关文章

      网友评论

        本文标题:iOS实现先无动画pop再push,替换当前控制器

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