原文地址;http://blog.csdn.net/totogo2010/article/details/7681879
1、UINavigationController导航控制器如何使用
UINavigationController可以翻译为导航控制器,在iOS里经常用到。
我们看看它的如何使用:
下面的图显示了导航控制器的流程。最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕;当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕。相应地,在对象管理上,导航控制器使用了导航堆栈。根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock视图控制器。可以调用pushViewControllerAnimated:方法将视图控制器推入栈顶,也可以调用popViewControllerAnimated:方法将视图控制器弹出堆栈。
上图来自苹果官网。
2、UINavigationController的结构组成
看下图,UINavigationController有Navigation bar ,Navigation View ,Navigation toobar等组成。
现在我们建立一个例子,看看如何使用UINavigationController
3、新建一个项目
命名为UINavigationControllerDemo,为了更好理解UINavigationController,我们选择Empty Application模板
4、创建一个View Controller,命名为RootViewController:依次选择File——New——New File,默认勾上With XIB for user interface.
选择正确位置创建完成,这时项目里多了三个文件,分别是RootViewController.h RootViewController.m RootViewController.xib文件。
打开RootViewController.xib,添加一个按钮控件,按钮Button改成 :Goto SecondView,为跳转做准备
5、打开AppDelegate.h,向其中添加属性:
- @property (strong, nonatomic) UINavigationController *navController;
添加后AppDelegate.h文件代码如下:
- #import <UIKit/UIKit.h>
- @class ViewController;
- @interface AppDelegate : UIResponder <UIApplicationDelegate>
- @property (strong, nonatomic) UIWindow *window;
- @property (strong, nonatomic) ViewController *viewController;
- @property (strong, nonatomic) UINavigationController *navController;
- @end
6、在AppDelegate.m 文件的didFinishLaunchingWithOptions方法中创建添加navController,RootViewController视图。
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- RootViewController *rootView = [[RootViewController alloc] init];
- rootView.title = @"Root View";
- self.navController = [[UINavigationController alloc] init];
- [self.navController pushViewController:rootView animated:YES];
- [self.window addSubview:self.navController.view];
- [self.window makeKeyAndVisible];
- return YES;
- }
7、现在Root视图添加完成
看看效果:
'
现在还没有Navigation bar 。只有title。
8、添加UIBarButtonItem
bar ButtonItem分左右UIBarButtonItem。我们把左右的都添加上去。
在RootViewController.m中添加代码如下:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(selectLeftAction:)];
- self.navigationItem.leftBarButtonItem = leftButton;
- UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(selectRightAction:)];
- self.navigationItem.rightBarButtonItem = rightButton;<p class="p1">}</p>
这里重点介绍下
UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:@selector(selectLeftAction:)];
UIBarButtonSystemItemAction的风格,这是系统自带的按钮风格,看下图,你不用一个个试验,你也知道想用那个item,如下图:
9、响应UIBarButtonItem的事件的实现
我们在 action:@selector(selectLeftAction:);
action添加了selectLeftAction和selectRightAction
在RootViewController.m文件中添加代码实现:
- -(void)selectLeftAction:(id)sender
- {
- UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你点击了导航栏左按钮" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
- [alter show];
- }
- -(void)selectRightAction:(id)sender
- {
- UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你点击了导航栏右按钮" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
- [alter show];
- }
这篇先讲添加UIBarButtonItem,下篇讲解页面跳转和添加UISegmentedControl
下篇:iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController
例子代码:https://github.com/schelling/YcDemo
根据网上的一些资料,自己做了一个demo,先上效果
以上的效果是很丑的(只是表达一个意思)。
首先使用到了MainViewController,FirstViewController两个视图。
先创建FirstViewController视图。
/// MainViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
//创建导航
FirstViewController *viewController = [[FirstViewController alloc] initWithNibName:nil bundle:nil];
viewController.title =@"firstViewController";
UINavigationController *navigationBar = [[UINavigationController alloc] init];
self.navigationController = navigationBar;
[navigationBar pushViewController:viewController animated:YES];
[self.view addSubview:navigationBar.view];
[navigationBar release];
}1.NavigationBar的使用
首先在 MainViewController.h文件中
@property(strong,nonatomic)UINavigationController *navigationController;
在MainViewController.m 中
//1.设置navigationBar的文本颜色
self.navigationController.navigationBar.tintColor = [UIColor redColor];
//2.设置navigationBar的背景图片
UIImage *navBarImage = [UIImage imageNamed:@"bottomBK.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:navBarImage];
[self.navigationController.navigationBar addSubview:imageView];
// 3.自定义 设置navigationBar的背景图片 的方式(采用类目的方式)
参考 http://blog.csdn.net/zhuzhihai1988/article/details/7705308
在FirstViewController.m文件中
// 1.上面导航栏中的 左边按钮(系统)
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:nil action:@selector(leftButtonAction:)];
self.navigationItem.leftBarButtonItem = leftButton;
[leftButton release];
//2.上面导航栏中的 自定义左边按钮
UIBarButtonItem *coutomButton = [[UIBarButtonItem alloc] initWithTitle:@"asdfasdf"style:UIBarButtonItemStyleDone target:self action:@selector(rightButtonAction1:)];
UIButton *button11 = [UIButton buttonWithType:UIButtonTypeCustom];
[button11 setFrame:CGRectMake(0, 0, 40, 30)];
[button11 setBackgroundColor:[UIColor redColor]];
[button11 setBackgroundImage:[UIImage imageNamed:@"102.png"] forState:UIControlStateNormal];
[button11 setBackgroundImage:[UIImage imageNamed:@"102-sel.png"] forState:UIControlStateHighlighted];
coutomButton.customView = button11;
[button11 release];
self.navigationItem.leftBarButtonItem = coutomButton;
[coutomButton release];
//3.自定义中间titleView
UIButton *titleButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
titleButton.frame = CGRectMake(0, 0, 40, 30);
[titleButton setBackgroundColor:[UIColor whiteColor]];
[titleButton setTitle:@"titlView" forState:UIControlStateNormal];
self.navigationItem.titleView = titleButton;
[titleButton release];
// 4.上面导航栏中的右边按钮(系统)
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(rightButtonAction1:)];
self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:rightButton, nil];
[rightButton release];
注意事项:
Navigationbar 的位置坐标和宽度,高度是修改不了的。 即bar.frame = CGRectMake(0,20,self.view.bounds.size.width,30);重新设置navigationbar是不起作用的。
2.NavigationToolBar的使用
在MainViewController.m文件中//1.显示底部工具栏
self.navigationController.toolbarHidden = NO;
//2.设置底部工具栏的背景图片
UIImage *navBarImage11 = [UIImage imageNamed:@"bottomBK.png"];
UIImageView *imageView11 = [[UIImageView alloc] initWithImage:navBarImage11];
[self.navigationController.toolbar addSubview:imageView11];
//3.设置底部工具栏的文本颜色
self.navigationController.toolbar.tintColor = [UIColor redColor];
//4.两个自定义tool下的按钮和系统save按钮
UIBarButtonItem *custom = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:nil action:nil];
UIButton *button3 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 44)];
[button3 setBackgroundImage:[UIImage imageNamed:@"102.png"] forState:UIControlStateNormal];
custom.customView = button3;
UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAddtarget:nil action:nil];
UIButton *button4 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 44)];
[button4 setBackgroundImage:[UIImage imageNamed:@"102.png"] forState:UIControlStateNormal];
add.customView = button4;
UIBarButtonItem *save = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSavetarget:nil action:nil];
UIBarButtonItem *save3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSavetarget:nil action:nil];
UIBarButtonItem *save1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSavetarget:nil action:nil];
UIBarButtonItem *save2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSavetarget:nil action:nil];
self.toolbarItems = [NSArray arrayWithObjects:custom,add,save,save1,save2,save3,nil];
[button3 release];
[button4 release];
[custom release];
[add release];
[save release];
[save1 release];
[save2 release];
[save3 release];
注意事项:
NavigationToolbar 的位置坐标和宽度同NavigationBar的一样不能修改的。