UINavigationController-02入棧操作

入棧操作

  • - pushViewController: animated:
    • 給導(dǎo)航控制器,添加子控制器
      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];
      
    • 也可以這樣, 創(chuàng)建的時(shí)候,就直接添加一個(gè)控制器
      - initWithRootViewController:
      內(nèi)部同樣是調(diào)用- pushViewController: animated:方法
      UINavigationController *navC = [[UINavigationController alloc]initWithRootViewController:vc];
      
    • 驗(yàn)證:
      • 在已經(jīng)使用- initWithRootViewController: vc的情況下,再次[navC pushViewController:vc animated:YES];
      • 會(huì)報(bào)錯(cuò):
        Pushing the same view controller instance more than once is not supported(<UIViewController: 0xxxx>)'
        
        same - 相同得
        不支持多次推送同一個(gè)視圖控制器實(shí)例`UIViewController`
        

  • 將自定義控制器,添加導(dǎo)航控制器里,并實(shí)現(xiàn)控制器之間切換。
    • 將自定義控制器OneViewController添加到UINavigationController
      OneViewController * oneVC = [[OneViewController alloc]init];
      UINavigationController *navC = [[UINavigationController alloc]init];
      [navC pushViewController:oneVC animated:YES];
      
    • 點(diǎn)擊下一個(gè)控制,實(shí)現(xiàn)控制器之間的切換
      -- 在'第一個(gè)控制'的按鈕點(diǎn)擊事件里面, 
      -- 創(chuàng)建第2個(gè)控制器,且添加到"導(dǎo)航控制器",成為子控制器。
      TwoViewController *twoVC = [[TwoViewController alloc]init];
      [self.navigationController pushViewController:twoVC animated:YES];
      
      • 為什么在自定義控制器里,可以直接 .navigationController?
        • UINavigationController 繼承 UIViewController
        • UINavigationControllerItem
          • UIViewController的分類
          • 里面有個(gè)navigationController 屬性
          • navigationController就是當(dāng)前的導(dǎo)航控制器
        • 自定義控制器繼承自UIViewController,所以可以直接.navigationController

  • 導(dǎo)航控制器的入棧操作分析
  • window的根控制器 強(qiáng)引用 導(dǎo)航控制器
  • 開(kāi)始的時(shí)候自定義控制器oneVCview放入棧頂控制器View里,導(dǎo)航控制器棧添加oneVC.
  • 當(dāng)自定義控制器twoVC要入棧時(shí),棧頂控制器View會(huì)將oneVC.view移除,加入twoVC.view."導(dǎo)航控制器棧"加入twoVC。
    注意:oneVC.view并沒(méi)有銷毀,因被oneVC強(qiáng)引用,而oneVC還在"導(dǎo)航控制器棧"最底部.
  • 當(dāng)自定義控制器threeVC入棧時(shí),棧頂控制器View移除twoVC.view,加入threeVC.view."導(dǎo)航控制器棧"加入threeVC。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容