UINavigationController学习笔记【ARC】(一)
前言:
最近一直在学习iOS开发,照着无线互联iOS开发视频学习,慢慢摸索中(视频地址:http://www.iphonetrain.com/video_info/267.html)。这套视频还算不错,比较适合初学者。主讲人是用纯代码来构建UI界面,相较于斯坦福大学的iOS公开课,我还是觉得用代码入门比较好,因为这样更有助于理解UIKIT的整个框架。目前自己学到UINavigationController部分,参照视频内容,记下笔记,方便以后查阅,毕竟好记性不如烂笔头嘛。好了,废话不多说,进入正题。
一、UINavigationController简介
按照视频中所讲,UINavigationController俗称“导航控制器”,算是iOS开发中用的最多的一类控制器了吧。控制器的效果如下图:

UIKit类图继承关系如下:

当然还有这张最经典的官方的层次图:

导航控制器采用栈来管理VC,也就是遵循“后进先出”的管理方式。
二、导航控制器常使用的几个方法
导航控制器有几个比较常用的方法,分别如下:
1.初始化
导航控制器常用的初始化方法是
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:vc];看方法的字面意思,就是把一个定义好的VC作为UINavigationController的rootViewController来初始化。所以在实际场景的应用如下
在AppDelegate.m文件中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
BaseViewController *baseController = [[BaseViewController alloc] init];//自定义的vc
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:baseController];//初始化
self.window.rootViewController = navigation;//作为window的rootViewController
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
2.ViewController入栈(push)
VC入栈,也就是app中跳转到下一个画面的过程。导航控制器常用的push方法为
[self.navigationController pushViewController:thdVC animated:YES];
所以实际应用场景为
- (void)pushVC{
ThirdViewController *thdVC = [[ThirdViewController alloc] init];//定义一个VC
[self.navigationController pushViewController:thdVC animated:YES];//push这个VC并跳转
}
3.ViewController出栈(pop)
VC出栈有三种常用的方法,分别为
- (void)pop{//往上一层VC跳转
[self.navigationController popViewControllerAnimated:YES];
}
- (void)root{//跳转到根VC
[self.navigationController popToRootViewControllerAnimated:YES];
}
- (void)index{//跳转到指定的VC
UIViewController *vc = [[self.navigationController viewControllers] objectAtIndex:1];
[self.navigationController popToViewController:vc animated:YES];
}
这里需要注意的是,这三个方法pop出栈的时候,都会导致当前的VC dealloc。根据测试来看,popToRootViewControllerAnimated会dealloc除了rootVC之外的所有VC;popToViewController方法会dealloc跳转后的VC之后的VC。两种方法执行的dealloc按照的是“先进先出”的模式,并不是栈的“后进先出”。
4.隐藏或显示toolbar和navigationbar
navigationbar是上部导航栏,toolbar是下部工具栏。toolbar默认不显示。
[self.navigationController setNavigationBarHidden:YES animated:YES];//隐藏navigation bar [self.navigationController setToolbarHidden:NO animated:YES];//显示toolbar
5.设置navigationbar的标题
navigationbar的标题设定比较简单,用self.title = @"root"方法即可设置。设置后的效果如下:

由上图可知,设置self.title后,当前VC的navigationbar的title会变化。相应的,当前vc push到下一个vc时,下一个vc的返回按钮的title会自动设置为上一个vc的title
当然,还有代码的方式,自定义返回按钮,简单的定义如下
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc]init]; backBtn.title = @"返回"; self.navigationItem.backBarButtonItem = backBtn;
还有这种方式,直接修改当前vc的返回按钮的title
self.navigationItem.backBarButtonItem.title = @"xx";
ok,先记到这儿吧

浙公网安备 33010602011771号