UINavigationController-03出棧操作

出棧操作

  • popViewControllerAnimated: 返回上一級(jí)
  • popToRootViewControllerAnimated: 返回根控制器
  • popToViewController: animated:返回到指定的子控制器

  • 通過(guò)示例,來(lái)熟悉出棧的幾個(gè)方法
    • 分析
      • 層級(jí):"紅色(第1層) -->黃色(第2層)-->綠色(第3層)-->桔色(第4層)"
      • 各個(gè)層級(jí)
        • 點(diǎn)擊"下一級(jí)控制器"按鈕,- pushViewController: animated:(入棧操作)
        • 點(diǎn)擊"控制器數(shù)量"按鈕,打印navigationController - 導(dǎo)航控制器里面有多少子控制器!
          驗(yàn)證: 是否將子控制器添加到"導(dǎo)航控制器"里面。(入棧)
      • 綠色的控制器
        • 點(diǎn)擊'返回上一級(jí)'按鈕,返回到"黃色的控制器"
      • 桔色的控制器,
        • 點(diǎn)"返回指定控制器"按鈕,切換到黃色控制器
        • 點(diǎn)"返回根控制器"按鈕,切換到紅色控制器

  • 示例代碼
    • OneViewController - 紅色控制器
      -- 下一級(jí)控制器
      - (IBAction)btnNextClick:(id)sender {
        TwoViewController *twoVC = [[TwoViewController alloc]init];
        [self.navigationController pushViewController:twoVC animated:YES];
      }
      -- 打印控制器的數(shù)量
      - (IBAction)btnNumClick:(id)sender {
        NSLog(@"self.childVC= %@",self.navigationController.childViewControllers);
      }
      
    • ThreeViewController - 綠色控制器
      -- 返回上一級(jí)控制器.-'返回黃色控制器'
      - (IBAction)btnThreeReturnClick:(id)sender {
        [self.navigationController popViewControllerAnimated:YES];
       }
      
    • FourViewController - 桔色控制器
      -- 返回到指定的控制器,'dataVC[1] -- 也就是黃色控制器'
      - (IBAction)btnReturnToClick:(id)sender {
          -- 獲取導(dǎo)航控制器里,所有的子控制器。
          NSArray<UIViewController *>* dataVC = self.navigationController.childViewControllers;
          [self.navigationController popToViewController:dataVC[1] animated:YES];
      
       --  ?  以下是錯(cuò)誤示范: 
        必須是已經(jīng)在導(dǎo)航控制器里面的子控制器,才能切換.
        新創(chuàng)建的控制器,無(wú)法切換,因?yàn)樵趯?dǎo)航控制器里面找不到。
        OneViewController *oneVC = [[OneViewController alloc]init];
        [self.navigationController popToViewController:oneVC animated:YES];
      }
      
      -- 返回到根目控制器
      - (IBAction)btnReturnRootClick:(id)sender {
        [self.navigationController popToRootViewControllerAnimated:YES];
      }
      
    • 注意:
      • -popToViewController: animated:返回到指定的子控制器,
        此子控制器,必須得要在childViewControllers中,否則:
        NSInternalInconsistencyException

  • 出棧做了哪些操作?
    • 銷毀"導(dǎo)航控制器"里的子控制器
    • 注意:
      它是先將要銷毀子控制器,集中在一個(gè)棧里,
      然后再刪除。
    • 假設(shè)當(dāng)前控制器是"桔色控制器",更加上面"層級(jí)所示"那么內(nèi)部,應(yīng)該是這樣得.
    • 此時(shí),點(diǎn)擊"返回根控制器",按照一般來(lái)講.銷毀順序:
      "桔色控制器 -->綠色控制器 -->黃色控制器", 可實(shí)際銷毀順序:
      "黃色控制器 -->綠色控制器 -->桔色控制器".這是因?yàn)?
    • 把子控制器,集中在一個(gè)棧里,然后再銷毀.

?著作權(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)容