IOS navigationController详解
一、UINavigationController导航控制器,通过栈来完成全部页面的导航,UINavigationController有Navigation bar、Navigation View,Navigation toolbar组成。
1、下面演示通过UINavigationController完成IOS页面的导航,首先新建一个Empty工程,工程名称为MyNavigationControllerDemo,然后在添加一个类,名称为MainViewController,创建的时候勾选With XIB for user interface,然后打开AppDelegate.m页面在,将里面的代码修改如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];// Override point for customization after application launch.self.window.backgroundColor = [UIColor whiteColor];//刚才创建的主窗体,首页加载显示的内容MainViewController *viewcontroller=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];viewcontroller.title=@"主页面";//标题的名称,在进入下一个页面时,返回的button上面显示的问题UINavigationController *navcontroller=[[UINavigationController alloc] init];//创建UINavigationController[navcontroller pushViewController:viewcontroller animated:YES];//将主页面push到栈里面[self.window addSubview:navcontroller.view];//将navigationcontroller添加到主页面[self.window makeKeyAndVisible];[viewcontroller release];return YES;
}
2、添加UIBarButtonItem,barButtonItem分为左右两个,我们现在将左右两个的barButtonItem添加上,在MainViewController.m的viewDidLoad里面分别添加如下代码:
- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view from its nib.//使用系统自带的,也可以使用自定义的button,label等,后面我们会讲解自定义的Button,Label显示在上面UIBarButtonItem *leftbtn=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(SaveBookMark:)];self.navigationItem.leftBarButtonItem=leftbtn;UIBarButtonItem *rightbtn=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(BtnSearch:)];self.navigationItem.rightBarButtonItem=rightbtn;self.navigationItem.title=@"欢迎";//设置了这个,前面设置viewcontroller.title不起作用,这个地方的title我们也可以设置为button,label等,使用 //self.navigationItem.titleView,在下一个页面,如果没有定义bar left NavigationItem,显示的文字就是这个,注,只识别title,titleView不识别
。
}
然后定义两个方法,用来相应左右的点击事件,代码如下:
-(void)SaveBookMark:(id)sender{NSLog(@"你点击了导航栏左侧的按钮");
}
-(void)BtnSearch:(id)sender{NSLog(@"你点击了导航栏右侧的按钮");
}
运行以后界面显示如下,
点击左右两个的按钮,可以执行相应的事件。
左右两边的图标,我们是使用的系统图标,图标主要有如下:
二、页面跳转
在MainViewController.xib页面放一个Button,在MainViewController.h里面定义一个方法,代码如下:
#import <UIKit/UIKit.h>@interface MainViewController : UIViewController-(IBAction)BtnViewProduct:(UIButton *)sender;@end
让后将其绑定到刚才添加的button点击事件中,截图如下:
选择 Touch Up Inside,同学修改button的名称为产品列表,
我们新建一个产品列表类,在创建的时候选中With xib for user interface,名称为ProductListViewController,在View上面放一个Label,修改名称为"产品列表页面",现在我们来实现点击MainViewController.xib上面的"查看产品列表”Button,跳转到产品列表页面,刚才我们已经给其绑定了一个点击事件,接下来我们去实现此事件,在MainViewController.m中实现 -(void)BtnViewProduct:(UIButton *)sender;实现代码如下:
-(void)BtnViewProduct:(UIButton *)sender{ProductListViewController *viewcontroller=[[ProductListViewController alloc] init];viewcontroller.title=@"列表";//跳转到下一个页面线的标题,如在下一个页面我们单独设置了标题则此标题不其作用。[self.navigationController pushViewController:viewcontroller animated:YES];[viewcontroller release]; }
点击跳转以后界面显示如下:
在此页面我们重新定义定义左右两个的barButtonItem,首先我们在程序中添加两张图片,一个为返回的图片,一张是进入主页面图标,在ProductListViewController.m的
- (void)viewDidLoad我们定义左右两个barButtonItem,并且设置标题,viewDidLoad代码如下:
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view from its nib.//设置所按钮//设置左边的barUIButton *backbutton=[UIButton buttonWithType:UIButtonTypeCustom];backbutton.frame=CGRectMake(0, 0, 50, 25);[backbutton setBackgroundImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];//定义点击事件[backbutton addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];UIBarButtonItem *leftitem=[[UIBarButtonItem alloc] initWithCustomView:backbutton];[self.navigationItem setLeftBarButtonItem:leftitem animated:YES];[leftitem release];//设置右边的barUIButton *mainbutton=[UIButton buttonWithType:UIButtonTypeCustom];mainbutton.frame=CGRectMake(0, 0, 50, 25);[mainbutton setBackgroundImage:[UIImage imageNamed:@"top_bar_home"] forState:UIControlStateNormal];[mainbutton addTarget:self action:@selector(BtnMain:) forControlEvents:UIControlEventTouchUpInside];//定义点击事件UIBarButtonItem *rightitem=[[UIBarButtonItem alloc] initWithCustomView:mainbutton];[self.navigationItem setRightBarButtonItem:rightitem animated:YES];[rightitem release];//设置标题UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 80, 25)];label.text=@"产品列表";[label setBackgroundColor:[UIColor clearColor]];label.textColor=[UIColor whiteColor];self.navigationItem.titleView=label;//或者//[[self navigationItem] setTitleView:label];//[self.navigationItem setTitleView:label];//self.navigationController.title=@"产品列表页";//从下一页返回的时候显示这个[label release];//self.navigationItem.title=@"产品列表页";//进入下一页以后,返回上面显示的文字//[self.navigationController.navigationBar setBackgroundImage:[self scaleToSize:[UIImage imageNamed:@"top_bar_bg"] size:CGSizeMake(320, 44)] forBarMetrics:UIBarMetricsDefault];//设置navigationbar的背景图片}
然后定义一个左右两个bar item的点击事件。
-(void)back:(UIButton *)sender{[self.navigationController popViewControllerAnimated:YES];//返回到上一个页面 } -(void)BtnMain:(UIButton *)sender{MainViewController *viewcontroller=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];[self.navigationController popToRootViewControllerAnimated:YES];//进入主页面[viewcontroller release]; }
最终产品列表界面显示如下图
例子代码:http://download.csdn.net/detail/u011872945/6611727
IOS navigationController详解相关推荐
- FreeEIM 来点新知识iOS UIScrollView详解
老程序员FreeEIM 来点新知识iOS UIScrollView详解 UIScrollView 顾名思义也知道这个是和滚动相关的控件,在Android开发时遇到过ScrollView,当内容的 ...
- iOS绘图详解-多种绘图方式、裁剪、滤镜、移动、CTM
iOS绘图详解 摘要: Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的 绘 ...
- IOS UIView详解
文章目录 IOS UIView详解 1.官方类分析 2. UIView 常用的属性 2.1 UIView的圆角加阴影效果的实现 2.2 UIView 属性 2.2.1 UIView 几何属性 2.2. ...
- iOS疯狂详解之AFNetworking图片缓存问题
AFNetworking网络库已经提供了很好的图片缓存机制,效率是比较高的,但是我发现没有直接提供清除缓存的功能,可项目通常都需要添加 清除功能的功能,因此,在这里我以UIImageView+AFNe ...
- iOS多线程详解:实践篇
iOS多线程实践中,常用的就是子线程执行耗时操作,然后回到主线程刷新UI.在iOS中每个进程启动后都会建立一个主线程(UI线程),这个线程是其他线程的父线程.由于在iOS中除了主线程,其他子线程是独立 ...
- iOS疯狂详解之开源库
youtube下载神器:https://github.com/rg3/youtube-dl vim插件:https://github.com/Valloric/YouCompleteMe vim插件配 ...
- [iOS] 国际化详解
PS:修改设备系统语言方法 设置 -> 通用 -> 语言与地区 -> iPhone 语言 Settings -> General -> Language & Re ...
- UE4 IOS打包详解
写在前面:因为是详解,所以可能写的有可能啰嗦,也有可能有些步骤是你经历过的,那么请忽略它,向下寻找可能的答案,如果没能解决你的问题,那么对此感到很抱歉,没能帮到你,欢迎你给我邮件: bluecode6 ...
- iOS模式详解runtime面试工作
简书:http://www.jianshu.com/p/19f280afcb24 对于从事 iOS 开发人员来说,所有的人都会答出「runtime 是运行时」,什么情况下用runtime?,大部分人能 ...
最新文章
- unity3d中旋转
- print2flashwindows7旗舰版下载哪一个_JUJUMAO_MSDN原版 win 7 二合一 旗舰版32位 64位原版ISO镜像...
- 互联生活:业务模式聚焦
- eyoucms内容添加发布
- javascript学习之数组的使用四 concat方法 join方法 reverse方法 sort方法
- linux更换内核后无法上网,ubuntu 系统升级内核版本后网络不能正常启动问题
- Atitit mybatis使用简明教程 目录 1.1. Mybatis.xml 配置文件	1 1.2. Datamp.xml mapper文件主要作用是分模块放sql语句	2 1.3. 查询
- Let'sEncrypt免费域名申请一键式脚本-目前最简单的脚本
- commvault xtrabackup全实例备份失败 处于未决状态(下)
- JTAG和SWD接口定义(20针)
- 储存卡怎么格式化为fat32_64g储存卡怎么格式化成fat32格式化
- 大一期末计算机应用基础考什么,计算机应用基础期末考试试题
- html style设置靠右,css怎么设置右对齐
- Redis基础--Redis 4.0 常用配置
- 非模式物种ROSE超级增强子鉴定分析详解
- 超级警探大战悍匪2java_Java笔记一
- 设备树使用手册【转】
- 使用高德地图API实现历史轨迹查询
- 新冠治愈之旅和未来的时光
- 专注儿童编程,核桃编程招人啦~