导航控制器UINavigationController

以前总结的一些基础知识


一、使用导航控制器实现界面之间的跳转
1.显示导航栏
先创建一个 RootViewController的类,让它继承UIViewController
AppDelegate.m文件中,将RootViewController类导入,且写入以下代码
//这里,将rvc设置为导航控制器nvc的根视图控制器,并将nvc设置为self.window的根视图控制器
//导航栏的默认大小为:320*64  (是否可以改变导航栏的大小??)
RootViewController * rvc = [[RootViewController alloc] init];
UINavigationController * nvc = [[UINavigationController alloc] initWithRootViewController:rvc];
self.window.rootViewController = nvc;
2.使用导航栏切换到下一个页面
把以下代码添加到执行切换动作的方法中(例子是添加到了buttonAction方法)
这里需要在当前文件中导入需要切换到的页面所属的ViewController类(例子是 #import "ViewController1.h")
-(void)buttonAction{
    ViewController1 * vc1 = [[ViewController1 alloc] init];
    [self.navigationController  pushViewController:vc1 animated:YES];
}
3.使用导航栏切换到上一个页面
把以下代码添加到执行切换动作的方法中(例子是添加到了buttonAction方法)
-(void)buttonAction{  
     // 返回上一层视图控制区
     [self.navigationController popViewControllerAnimated:YES];
}
4.使用导航栏切换到根视图控制器页面【常用】
把以下代码添加到执行切换动作的方法中(例子是添加到了buttonAction方法)
-(void)buttonAction{
     //返回根视图控制器
    [self.navigationController popToRootViewControllerAnimated:YES];
}
5.使用导航栏从当前页面切换到任意视图控制器页面
把以下代码添加到执行切换动作的方法中(例子是添加到了buttonAction方法)
-(void)buttonAction{
     //返回到任意一个视图控制器
     //但是需要切换到的视图控制器必须是存在于self.navigationController.viewControllers数组中的视图控制器
     //viewControllers存储着导航控制器中所有之前跳转到得视图控制器
     //push 一次就在viewControllers 数组中多加一个视图控制器的对象
     //pop 一次就在viewControllers 数组中删除一个视图控制器的对象
     //popTORootViewController,viewControllers数组中只留下根视图控制器,其他全部删除
    NSArray * arr =  self.navigationController.viewControllers;
    [self.navigationController popToViewController:arr[1] animated:YES];
}
【注意:使用导航栏切换页面时,一定要把以上方法写到执行切换动作的方法中

二、导航条控件的设置      【self.navigationItem
1.设置标题(两种方式)
(1)文字标题
self.title = @"登录界面";//这样既会设置导航的标题,也同时设置了标签栏的标题
self.navigationItem.title = @"登录界面";
(2)用图片设置标题(即在标题位置显示logo图片
//细节1: titleView优先级高,覆盖文本标题
//细节2: titleViewUIView,意味可以设置任意控件
//细节3: xy忽略
//细节4: 如果图片显示不出来,原因:(1)名字 (2)必须设置大小
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
imageView.image = [UIImage imageNamed:@“title.png"];
self.navigationItem.titleView = imageView;
2.在导航栏左侧添加按钮
  • 添加不同风格的按钮
(1)添加文本按钮
UIBarButtonItem * leftBarButton1 = [[UIBarButtonItem alloc] initWithTitle:@"设置" style:UIBarButtonItemStylePlain target:self action:@selector(leftBarButtonAction)];
self.navigationItem.leftBarButtonItem = leftBarButton1;
(2)添加系统风格的按钮
UIBarButtonItem * leftBarButton2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(leftBarButtonAction)];
self.navigationItem.leftBarButtonItem = leftBarButton2;
(3)添加自定义按钮(有图片背景的按钮)
//这里先创建了一个自定义风格的button,将这个button设置为导航栏的左侧按钮
//细节: 图片显示不出来的原因:没有设置大小
UIButton * leftButton = [UIButton buttonWithType:UIButtonTypeCustom];
[leftButton setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
leftButton.frame = CGRectMake(0, 0, 20, 20);
UIBarButtonItem * leftBarButton = [[UIBarButtonItem alloc]initWithCustomView:leftButton];
self.navigationItem.leftBarButtonItem = leftBarButton;
  • 添加不同个数的按钮
(1)只添加一个按钮
self.navigationItem.leftBarButtonItem = leftBarButton1;
(2)添加多个按钮
NSArray * arr = @[leftBarButton1,leftBarButton2];
self.navigationItem.leftBarButtonItems = arr;
  • 给下一个页面导航条设置返回按钮(其实也是设置导航条的左侧按钮)
(1)设置导航条上的返回按钮
//细节1: 设置在当前页面,显示在下个界面上
//细节2: 会自动忽略自定义ButtonItem的事件响应方法
//细节3:只能用下述方式创建UIBarButtonItem才能显示出来,并且只能改变返回按钮的标题(即给 backBarButtonItem赋值的对象必须是文本按钮
self.navigationItem.backBarButtonItem = leftBarButton1;

三、导航条的设置 (风格、背景图片、颜色)  【self.navigationController
1.设置导航条的风格
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
2.设置导航条的透明度
[self.navigationController.navigationBar setTranslucent:YES];
3.设置导航条的颜色
(1)设置导航条背景颜色
//细节1:混合色
//细节2: 只有设置为透明后才会出现
[self.navigationController.navigationBar     setBackgroundColor:[UIColor redColor]];
(2)设置导航栏背景颜色 (纯色,非混合色)
[self.navigationController.navigationBar setBarTintColor:[UIColor blackColor]];
(3)设置色调(即设置导航条上按钮文字的颜色)
[self.navigationController.navigationBar setTintColor:[UIColor redColor]];
4.设置导航条的背景图片
// forBarMetrics参数,横屏还是竖屏
//图片格式:320*64  (iPhone5之前是320*44)
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics:UIBarMetricsDefault];
5.隐藏导航栏
// 要想每次切换到该页面都执行到,需要写到 -(void)viewWillAppear:(BOOL)animated;方法中
[self.navigationController setNavigationBarHidden:YES];

四、工具栏的使用(屏幕最下方)
1.显示工具栏 
//工具栏默认是隐藏的
[self.navigationController setToolbarHidden:NO];
2.在工具栏中添加按钮
//下面先定义了两个UIBarButtonItem按钮,再定义了一个UIBarButtonItem类型的空格(按钮中间用空格隔开),最后把它们都添加到工具栏中
UIBarButtonItem *one = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(toolButtonClick:)];
UIBarButtonItem *two = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(toolButtonClick:)];
UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; //间隔也是UIBarButtonItem类型的
//one,two中间放了空格
self.toolbarItems = [NSArray arrayWithObjects:one,space,two,nil];

【补充:要想在导航栏或者工具栏中添加UIView控件】
[ self. navigationController. view addSubview:button];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haiooh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值