导航控制器的知识总结

1.导航控制器的功能和介绍

【注】导航控制器,是UIKit框架提供的一个容器视图控制器,用于切换拥有明确层次关系的视图。即由一级视图切换到二级视图,而不是平级视图间的切换。

【注】导航中视图控制器的层次结构,称为栈结构。

2.如何使用导航控制器实现界面之间的跳转

<1>显示一个界面,显示导航条

//使用导航控制器

//1.创建导航控制器,rvc放到导航控制器中

//2.导航控制器作为window根视图控制器

//导航条大小: 320X44

RootViewController *rvc = [[RootViewController alloc] init];

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:rvc];

self.window.rootViewController = nc;

<2>使用导航控制器切换到另外一个界面

SecondViewController *svc = [[SecondViewController alloc] init];

[self.navigationController pushViewController:svc animated:YES];

<3>如何使用代码切换到上一个界面

//实现切换到上一个界面

[self.navigationController popViewControllerAnimated:YES];

<4>如何从任意视图控制器切换到根视图控制器

非常常用: 程序任意界面返回到登陆界面,返回应用主界面

//返回导航控制器中根视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

<5>如何导航控制器切换到任意的视图控制器

//如何利用导航控制器切换到第二个界面

//viewControllers存储者导航控制器中所有的视图控制器

NSArray *viewControllers = self.navigationController.viewControllers;

[self.navigationController popToViewController:[viewControllers objectAtIndex:1] animated:YES];

3.导航条上控件的设置

<1>设置标题(文字)

self.title = @"主界面";

//导航控制器的控件集合

self.navigationItem.title = @"main";

//细节1: 修改的都是标题,最后一个是有效的

<2>设置图片标题

//标题位置显示logo图片

//细节1: titleView优先级高,覆盖文本标题

//细节2: titleView是UIView,意味设置任意控件

//细节3: x和y忽略

//细节4: 图片显示不出来(1)名字 (2)必须设置大小

UIImageView *logoView = [[UIImageView alloc] init];

logoView.frame = CGRectMake(0, 0, 60, 35);

logoView.image = [UIImage imageNamed:@"logo_title.png"];

self.navigationItem.titleView = logoView;

[logoView release];

<3>左侧添加文本按钮

//<1>创建文本按钮

UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithTitle:@"点我" style:UIBarButtonItemStyleDone target:self action:@selector(navButtonClick:)];

self.navigationItem.leftBarButtonItem = leftItem;

<4>左侧添加系统样式的按钮

//<2>.创建系统样式的按钮

UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(navButtonClick:)];

self.navigationItem.leftBarButtonItem = leftItem;

<5>左侧添加自定义的按钮

//细节: 图片没有显示的问题,没有设置大小

UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom];

leftButton.frame = CGRectMake(0, 0, 33, 30);

[leftButton setBackgroundImage:[UIImage imageNamed:@"main_left_nav.png"] forState:UIControlStateNormal];

[leftButton addTarget:self action:@selector(navCustomButtonClick:) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];

self.navigationItem.leftBarButtonItem = leftItem;

<6>下个界面的左侧添加返回的按钮

//写在mainViewController

//细节1: 显示在下个界面上

//细节2: 忽略自定义ButtonItem的事件响应方法

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"返回主界面" style:UIBarButtonItemStyleDone target:self action:@selector(backButtonClick:)];

self.navigationItem.backBarButtonItem = backItem;

[backItem release];

4.导航条的设置(风格,背景图片,颜色)

<1>设置导航条的风格

//<1>设置风格(默认和黑色)

//<2> 不同的版本上会有不同: 两个枚举值放弃使用了

//细节: 设置透明后视图会上移

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];

[self.navigationController.navigationBar setTranslucent:YES];

<2>颜色和色调

//<2>导航条颜色的设置

//颜色???

//细节1:混合色

//细节2: 只有设置为透明后才会出现

[self.navigationController.navigationBar setBackgroundColor:[UIColor redColor]];

//设置色调

[self.navigationController.navigationBar setTintColor:[UIColor redColor]];

<3>背景图片

//UIBarMetricsDefault表示横屏

//UIBarMetricsLandscapePhone竖屏

//细节: 图片格式适宜为 320X44

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg.png"] forBarMetrics:UIBarMetricsDefault];

<4>隐藏导航条

//隐藏导航栏

[self.navigationController setNavigationBarHidden:YES];

5.工具栏的使用(添加按钮)

<1>如何显示工具条

//细节: 导航控制器自带导航条和工具条

// 工具条默认情况下不会显示

[self.navigationController setToolbarHidden:NO];

<2>工具条上添加按钮

// 其中的对象应该是 UIBarButtonItem

//细节: 显示的从左边,按钮中没有间隔

UIBarButtonItem *one = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(toolButtonClick:)];

UIBarButtonItem *two = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(toolButtonClick:)];

UIBarButtonItem *three = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(toolButtonClick:)];

//间隔也是UIBarButtonItem

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

self.toolbarItems = [NSArray arrayWithObjects:one,space,two,space,three,nil];

<3>指定按钮的位置

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];

space.width = 60;

6.导航控制器的界面传值 (单例传值)

<1>正向传值

ImageCategoryViewController *icvc = [[ImageCategoryViewController alloc] init];

icvc.username = @"long ao tian";

icvc.delegate = self;

[self.navigationController pushViewController:icvc animated:YES];

<2>反向传值 !!!

//思路:

//思考1: 当前视图控制器有没有main指针

// <1>当前视图控制器加属性 delegate

// <2>切换到当前界面的是设置 delegate

//delegate一半都是id类型

//思考: 能不能给他发送消息

// 发送后delegate没有方法响应这个消息

// <1>自己要指定一个协议

// <2>对方遵守协议,实现协议中方法

//细节: Image制定协议, 别人遵守

7.扩展: 好玩界面间的切换效果

//@"cube" @"moveIn" @"reveal" @"fade"(default) @"pageCurl" @"pageUnCurl" @"suckEffect" @"rippleEffect" @"oglFlip"

//加上切换效果, 扩展内容

// QuartzCore 实现动画

//1.包含头文件

//2.导入库二进制文件Library

//<1>创建对象

CATransition *animation = [CATransition animation];

//设置动画类型

// //@"cube" @"moveIn" @"reveal" @"fade"(default) @"pageCurl" @"pageUnCurl" @"suckEffect" @"rippleEffect" @"oglFlip"

animation.type = @"fade";

//设置动画的方向

animation.subtype = kCATransitionFromTop;

//设置动画时间.0.5秒

animation.duration = 3;

//设置动画的节奏

animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

//animation加入到导航控制器中

[self.navigationController.view.layer addAnimation:animation forKey:nil];

[self.navigationController pushViewController:icvc animated:YES];

8. //设置naviagtionbar的返回按钮颜色

// self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

posted @ 2016-01-02 21:10  w_only  阅读(388)  评论(0编辑  收藏  举报