导航控制器的知识总结

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]}];

时间: 2024-10-13 23:18:22

导航控制器的知识总结的相关文章

关于ios导航控制器的知识总结

关于ios导航控制器的知识总结 添加了导航控制器后: 1.每个页面都会有一个顶部导航栏navigationbar和底部工具栏toolbar,它们是导航控制器navC的属性.且导航栏默认是不隐藏的,而底部工具栏默认是隐藏的. 2.可以通过设置 self.navigationController.toolbarHidden = NO来显示底部工具栏,工具栏中的内容可以通过viewController的toolbarItems来设置,显示的顺序和设置的NSArray中存放的顺序一致,其中每一个数据都一

分栏控制器与导航控制器的联合使用-主流框架

现在的一些主流的框架基本上是按 分栏控制器和导航控制器配合使用的 导航控制器负责横向切换 分栏控制器是控制纵向的切换 我们应该研究 一些主流框架的实现原理 在此基础上提升的速度才会比较快 这里只是给大家抛砖,希望大家能够学习到一些知识 我们所说的栈控制器 -本质上就是一个数组 ,用于管理每个页面 直接上代码了: // // AppDelegate.h // 88888-tabbar #import <UIKit/UIKit.h> @interface AppDelegate : UIRespo

猫猫学iOS 之微博项目实战(2)微博主框架-自己定义导航控制器NavigationController

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一:加入导航控制器 上一篇博客完毕了对底部的TabBar的设置,这一章我们完毕自己定义导航控制器(NYNavigationController). 为啥要做自己定义呢.由于为了更好地封装代码,而且系统的UINavigationController不能满足我们的需求了,所以得自己定义. 首先,我们在NYTabBarViewCon

iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在storyboard中,默认的控制器是View Controller,而我们需要的是导航控制器,那么就把系统的给删掉,拖一个导航控制器进来,导航控制器中默认的第一个子控制器是一个tableview controller,这里不需要,把它删掉,重新拖三个View Controller到界面上进行连线,简单的设置就可以了.           按钮连线,按住ctrl,右边界面选择push

UINavigationController导航控制器

UINavigationController导航控制器,是多个界面间跳转的重要元素,可以理解为它存储着多个viewController,它的存储结构是栈,栈的特点是先进后出,所以添加视图控制器时,要特别注意. UINavigationController有几个常用的方法: 1:[UINavigationController initWithRootViewController:viewController ] 是指将哪一个视图控制器设置为导航控制器的根视图控制器,即运行是第一次看到的界面. 2:

2016 -1 -3 导航控制器的学习

1.效果如下: 2.UINavigationController,导航控制器也是UIViewController的子类 (1)在Appdelegate.h中 设置UIWindow及其根控制器为导航控制器,代码如下: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customiza

去除警告,打电话,发信息,应用程序之间跳转,打印沙盒路径,字符串名字转换方法,包装导航控制器等的代码

从偏好设置中读取值: 打电话代码: 发信息代码: 打印沙盒路径代码: 应用程序之间跳转代码: 跳转到苹果商店代码: 去除警告代码: 根据字符串名称转换成相对应方法的代码: #import "SZMSettingsCell.h" @implementation SZMSettingsCell //选择不同的cell类型 + (UITableViewCellStyle)cellStyleWithDict:(NSDictionary *)dict{ UITableViewCellStyle

iOS开发——实用技术OC篇&amp;8行代码教你搞定导航控制器全屏滑动返回效果

8行代码教你搞定导航控制器全屏滑动返回效果 前言 此次文章,讲述的是导航控制器全屏滑动返回效果,而且代码量非常少,10行内搞定. 效果如图: 如果喜欢我的文章,可以关注我,也可以来小码哥,了解下我们的iOS培训课程.陆续还会有更新ing.... 一.自定义导航控制器 目的:以后需要使用全屏滑动返回功能,就使用自己定义的导航控制器. 二.分析导航控制器侧滑功能 效果:导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能. 系统自带的侧滑效果: 分析: 1.导航控制器的view

IOS开发——UI进阶篇(十)导航控制器、plist存储、微博详情页

一.导航控制器出栈 1.initWithRootViewController本质 UIViewController *vc = [[OneViewController alloc] init]; // 创建导航控制器 // 导航控制器必须要有一个根控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; // 会调用push方法 // initWithRoot