iOS UINavigationController

在iOS當(dāng)中提供了兩個(gè)比較特殊的控制器,
一個(gè)是NSNavigationController
一個(gè)是NSTabBarController
他們是用來(lái)管理控制器的控制器

UINavigationController 導(dǎo)航控制器:

一、功能:實(shí)現(xiàn)頁(yè)面之間的跳轉(zhuǎn)

當(dāng)跳轉(zhuǎn)到下一個(gè)子控制器時(shí),它默認(rèn)的就有返回功能,而且自帶側(cè)邊滑動(dòng)返回功能。
導(dǎo)航控制器的子控制器都可以拿到當(dāng)前的導(dǎo)航控制器

主要的push方法

//想要跳轉(zhuǎn)到下一個(gè)界面, 也就是將下一個(gè)控制器添加給當(dāng)前控制器的子控制器. 
[self.navigationController pushViewController:xxxVC animated:YES];
二、基本使用:

1.初始化UINavigationController
2.設(shè)置UIWindow的rootViewController為UINaviationController
3.根據(jù)具體情況,通過(guò)push方法添加對(duì)應(yīng)的子控制器

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 1.創(chuàng)建窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    // 2.設(shè)置窗口的根控制器
    RootViewController *rootVC = [[RootViewController alloc] init];
    
    // 創(chuàng)建導(dǎo)航控制器
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootVC];
    self.window.rootViewController = nav;
    
    // 把一個(gè)控制器添加到導(dǎo)航控制器當(dāng)中
//    [nav pushViewController:vc animated:YES];
    
    // 3.顯示窗口
    [self.window makeKeyAndVisible];
    
    return YES;
}
三、實(shí)現(xiàn)原理(出棧和入棧)

導(dǎo)航控制器是以棧的形式管理子控制器的,也就是數(shù)組.
里面有兩個(gè)數(shù)組,
分別是ViewControllers和ChildViewControllers, 都是數(shù)組, 保存的都是導(dǎo)航控制器的子控制器.

使用push方法就是把某個(gè)控制器壓入到棧當(dāng)中,即入棧
使用pop方法可以移除控制器,即出棧

  • 將棧頂?shù)目刂破饕瞥?/li>
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
  • 回到指定的子控制器
    指定的控制器必須是導(dǎo)航控制器棧里面的控制器.
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
  • 回到根控制器(棧底控制器)
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

可以通過(guò)push方法給導(dǎo)航控制器添加子控制器

導(dǎo)航控制器會(huì)把子控制器的view添加到導(dǎo)航控制器專(zhuān)門(mén)存放控制器的View上面
導(dǎo)航控制器的initWithRootViewContorller設(shè)置導(dǎo)航控制器的根控制器.
它其實(shí)底層調(diào)用的就是導(dǎo)航控制器的push方法,把傳入的控制器添加為導(dǎo)航控制器的子控制器

注意:導(dǎo)航控制器必須要有一個(gè)根控制器
導(dǎo)航控制器的根控制器就是導(dǎo)航控制器的子控制器
導(dǎo)航控制器當(dāng)中的childsViewControllers數(shù)組,
數(shù)組當(dāng)中存放的都是導(dǎo)航控制器的子控制器

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
  • 每一個(gè)控制器都能拿到它當(dāng)前所在的導(dǎo)航控制器,因?yàn)楫?dāng)前的控制器是導(dǎo)航控制器的子控制器。
twiceViewController *twiceVC = [[twiceViewController alloc] init]; [self.navigationController pushViewController:twiceVC animated:YES];
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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