UINavigationController即导航控制器,是iOS里最常用的交互控件之一。下面介绍一下它的详细用法以及一些小的技巧
一.UINavigationController的结构组成。
看下图,UINavigationController有Navigation bar ,Navigation View ,Navigation toobar等组成。
二.创建
在入口类里实现如下代码
ViewController *rootVC = [[ViewController alloc]init]; UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:rootVC];
self.window.rootViewController = nav;
或者在根控制器里实现
UINavigationController *nav = [[UINavigationController alloc] init]; UIViewController *aView = [[UIViewController alloc] init]; [nav pushViewController:aView animated:NO];//导航栏的第一个视图不要动画化
其中的rootVC就是导航控制器的根控制器,aView是根视图。
三.对导航条的设置
//添加标题
self.navigationItem.title = @"根视图"; //给导航条加背景图 [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg"] forBarMetrics:UIBarMetricsDefault]; //添加titleView,可以用来自定义标题格式,也可以放置图片标题,图片大小要适中 self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titleView.png"]]; //改变标题的颜色 self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName]; //添加Logo,只在第一个页面显示,一些项目的主页会用到这个需求 UIView *shareNavleftView = [[UIView alloc] init]; shareNavleftView.frame = CGRectMake(0, 0, 115, 35); UIImageView *img = [[UIImageView alloc] init]; img.image = [UIImage imageNamed:@"logo"]; img.autoresizingMask = UIViewAutoresizingFlexibleWidth; img.frame = shareNavleftView.frame; [shareNavleftView addSubview:img]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:shareNavleftView]; //添加左右按钮 UIBarButtonItem * leftItem = [[UIBarButtonItem alloc]initWithTitle:@"left" style:UIBarButtonItemStylePlain target:self action:@selector(leftClick)]; self.navigationItem.leftBarButtonItem = leftItem ; UIBarButtonItem * rightItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(rightItemClick)]; self.navigationItem.rightBarButtonItem = rightItem ; //也可以简化为一句代码 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"left" style:UIBarButtonItemStylePlain target:self action:@selector(leftClick)]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(rightItemClick)];</span>
//隐藏导航栏 [self.navigationController setNavigationBarHidden:YES animated:YES];</span>
//进入到下一个界面
FirstViewController *firstVC = [[FirstViewController alloc]init]; [self.navigationController pushViewController:firstVC animated:YES];
//返回之前的界面
[self.navigationController popViewControllerAnimated:YES];
//返回指定的界面
[self.navigationController popToViewController:secondVC animated:YES];
//返回根视图
[self.navigationController popToRootViewControllerAnimated:YES];
五.其他细节
//隐藏返回按钮 self.navigationItem.hidesBackButton =YES;
//设置导航栏透明 self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) //设置导航栏下部的线不显示 self.navigationController?.navigationBar.shadowImage = UIImage()
所有版本对含有导航的视图控制器中的view有影响的因素有
self.edgesForExtendedLayout
self.navigationController!.navigationBar.translucent
self.automaticallyAdjustsScrollViewInsets
self.extendedLayoutIncludesOpaqueBars