您的位置:首页 > 产品设计 > UI/UE

UINavigationController 详解

2015-05-29 16:53 429 查看
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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: