入棧操作
-
- 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`
- 在已經(jīng)使用
- 給導(dǎo)航控制器,添加子控制器
- 將自定義控制器,添加導(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í)候
自定義控制器oneVC將view放入棧頂控制器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。

