UINavigationController-02入栈操作

入栈操作

  • - pushViewController: animated:
    • 给导航控制器,添加子控制器
      UINavigationController *navC = [[UINavigationController alloc]init];
      navC.view.backgroundColor = [UIColor redColor];
      
      UIViewController* vc = [[UIViewController alloc]init];
      vc.view.backgroundColor = [UIColor yellowColor];
      
      [navC pushViewController:vc animated:YES];
      
    • 也可以这样, 创建的时候,就直接添加一个控制器
      - initWithRootViewController:
      内部同样是调用- pushViewController: animated:方法
      UINavigationController *navC = [[UINavigationController alloc]initWithRootViewController:vc];
      
    • 验证:
      • 在已经使用- initWithRootViewController: vc的情况下,再次[navC pushViewController:vc animated:YES];
      • 会报错:
        Pushing the same view controller instance more than once is not supported()'
        
        same - 相同得
        不支持多次推送同一个视图控制器实例`UIViewController`
        

  • 将自定义控制器,添加导航控制器里,并实现控制器之间切换。
    • 将自定义控制器OneViewController添加到UINavigationController
      OneViewController * oneVC = [[OneViewController alloc]init];
      UINavigationController *navC = [[UINavigationController alloc]init];
      [navC pushViewController:oneVC animated:YES];
      
    • 点击下一个控制,实现控制器之间的切换
      -- 在'第一个控制'的按钮点击事件里面, 
      -- 创建第2个控制器,且添加到"导航控制器",成为子控制器。
      TwoViewController *twoVC = [[TwoViewController alloc]init];
      [self.navigationController pushViewController:twoVC animated:YES];
      
      • 为什么在自定义控制器里,可以直接 .navigationController?
        • UINavigationController 继承 UIViewController
        • UINavigationControllerItem
          • UIViewController的分类
          • 里面有个navigationController 属性
          • navigationController就是当前的导航控制器
        • 自定义控制器继承自UIViewController,所以可以直接.navigationController

  • 导航控制器的入栈操作分析
  • window的根控制器 强引用 导航控制器
  • 开始的时候自定义控制器oneVCview放入栈顶控制器View里,导航控制器栈添加oneVC.
  • 自定义控制器twoVC要入栈时,栈顶控制器View会将oneVC.view移除,加入twoVC.view."导航控制器栈"加入twoVC
    注意:oneVC.view并没有销毁,因被oneVC强引用,而oneVC还在"导航控制器栈"最底部.
  • 自定义控制器threeVC入栈时,栈顶控制器View移除twoVC.view,加入threeVC.view."导航控制器栈"加入threeVC

你可能感兴趣的:(UINavigationController-02入栈操作)