美文网首页
UINavigationController-03出栈操作

UINavigationController-03出栈操作

作者: js_huh | 来源:发表于2020-08-23 11:50 被阅读0次

出栈操作

  • popViewControllerAnimated: 返回上一级
  • popToRootViewControllerAnimated: 返回根控制器
  • popToViewController: animated:返回到指定的子控制器

  • 通过示例,来熟悉出栈的几个方法
    • 分析
      • 层级:"红色(第1层) -->黄色(第2层)-->绿色(第3层)-->桔色(第4层)"
      • 各个层级
        • 点击"下一级控制器"按钮,- pushViewController: animated:(入栈操作)
        • 点击"控制器数量"按钮,打印navigationController - 导航控制器里面有多少子控制器!
          验证: 是否将子控制器添加到"导航控制器"里面。(入栈)
      • 绿色的控制器
        • 点击'返回上一级'按钮,返回到"黄色的控制器"
      • 桔色的控制器,
        • 点"返回指定控制器"按钮,切换到黄色控制器
        • 点"返回根控制器"按钮,切换到红色控制器

  • 示例代码
    • OneViewController - 红色控制器
      -- 下一级控制器
      - (IBAction)btnNextClick:(id)sender {
        TwoViewController *twoVC = [[TwoViewController alloc]init];
        [self.navigationController pushViewController:twoVC animated:YES];
      }
      -- 打印控制器的数量
      - (IBAction)btnNumClick:(id)sender {
        NSLog(@"self.childVC= %@",self.navigationController.childViewControllers);
      }
      
    • ThreeViewController - 绿色控制器
      -- 返回上一级控制器.-'返回黄色控制器'
      - (IBAction)btnThreeReturnClick:(id)sender {
        [self.navigationController popViewControllerAnimated:YES];
       }
      
    • FourViewController - 桔色控制器
      -- 返回到指定的控制器,'dataVC[1] -- 也就是黄色控制器'
      - (IBAction)btnReturnToClick:(id)sender {
          -- 获取导航控制器里,所有的子控制器。
          NSArray<UIViewController *>* dataVC = self.navigationController.childViewControllers;
          [self.navigationController popToViewController:dataVC[1] animated:YES];
      
       --  ❌  以下是错误示范: 
        必须是已经在导航控制器里面的子控制器,才能切换.
        新创建的控制器,无法切换,因为在导航控制器里面找不到。
        OneViewController *oneVC = [[OneViewController alloc]init];
        [self.navigationController popToViewController:oneVC animated:YES];
      }
      
      -- 返回到根目控制器
      - (IBAction)btnReturnRootClick:(id)sender {
        [self.navigationController popToRootViewControllerAnimated:YES];
      }
      
    • 注意:
      • -popToViewController: animated:返回到指定的子控制器,
        此子控制器,必须得要在childViewControllers中,否则:
        NSInternalInconsistencyException

  • 出栈做了哪些操作?
    • 销毁"导航控制器"里的子控制器
    • 注意:
      它是先将要销毁子控制器,集中在一个栈里,
      然后再删除。
    • 假设当前控制器是"桔色控制器",更加上面"层级所示"那么内部,应该是这样得.
    • 此时,点击"返回根控制器",按照一般来讲.销毁顺序:
      "桔色控制器 -->绿色控制器 -->黄色控制器", 可实际销毁顺序:
      "黄色控制器 -->绿色控制器 -->桔色控制器".这是因为:
    • 把子控制器,集中在一个栈里,然后再销毁.

相关文章

  • UINavigationController-03出栈操作

    出栈操作 popViewControllerAnimated: 返回上一级 popToRootViewContro...

  • 栈的简单Java实现

    栈栈的特点是先进后出,出栈、入栈都是在栈顶操作。

  • 栈的Java实现

    利用数组实现栈的操作,栈的操作是先进后出。

  • 数据结构实验1.4:栈和队列

    实验内容 : 1.采用链式存储实现栈的初始化、入栈、出栈操作。2.采用顺序存储实现栈的初始化、入栈、出栈操作。3....

  • Swift基础之实现一个栈

    首先栈是一个遵从“后进先出,先进后出”规则的序列。同时还有两个操作:入栈操作,将一个元素放入栈中;出栈操作,当栈不...

  • OpenGL_矩阵压栈和出栈

    1. 压栈和出栈的理解 压栈出栈操作的是矩阵 用来记录矩阵的状态 压栈PushMatrix和出栈PopMatrix...

  • day2:栈与栈的应用

    栈的定义 一种先进后出的方式 栈的实现 一:顺序方式 应用Stack.java 二:链式方式 如栈操作: 出栈操作...

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 数据结构-栈(stack)和队列

    比如浏览器的上一步,就是栈的概念,后进先出 栈的插入和删除操作 栈的定义 栈的创建 入栈操作 出栈操作 栈的理解 ...

  • 数据结构:Go 数组实现栈操作

    简介 栈的特点: 单向操作 先入后出(First In Last Out) FILO 操作 压栈、弹栈、清空、创建...

网友评论

      本文标题:UINavigationController-03出栈操作

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