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

18-UINavigationController 导航控制器

2015-07-19 16:27 671 查看
1.导航控制器概念   高度44
     管理型控制器,用来管理子控制器切换的大管家,本身不显示内容,而是管理子控制器的视图显示

windows->导航栏根控制器->导航栏->视图控制器

UINavigationController的使用步骤

(1)初始化UINavigationController

(2)设置UIWindow的rootViewController为UINavigationController

(3)根据具体情况,通过push方法添加对应个数的子控制器

说明:

导航控制器是通过栈的形式来管理子控制器的(先进后出)

显示在导航控制器上得view永远是栈顶控制器的view

一个导航控制器只有一个导航条,也就是说所有的自控制器公用一个导航条。

2.创建导航控制器
2.1
第一步:创建第一个导航控制器
//1.创建一个根控制器
RootViewController *root = [[RootViewController alloc] init];

//2.创建一个导航控制器,并在初始化时赋值一个根控制器
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:root];

//3.将windows的根控制器设置为导航控制器
self.window.rootViewController = navigation;

第二步:导航到下一个导航控制器
//1.创建第二个试图控制器
SecondViewController *sec = [[SecondViewController alloc] init];

//2.导航到第二个导航控制器
[self.navigationController pushViewController:sec animated:YES];

//3.设置不隐藏导航栏和下方工具栏
[self.navigationController setNavigationBarHidden:NO animated:YES];
[self.navigationController setToolbarHidden:NO animated:YES];

3.设置导航栏标题 

//1.方式一:
self.title = @"这是一个标题";
//2.方式二:其实是给导航项中的标题设置的
self.navigationItem.title = @"这是个标题";
//3.方式三:
//iOS6以后使用的方法
self.navigationItem.title = @"这是个标题";
NSDictionary *dic = @{
NSFontAttributeName:[UIFont systemFontOfSize:20],
NSForegroundColorAttributeName:[UIColor redColor]
};
[self.navigationController.navigationBar setTitleTextAttributes:dic];
//4.自定义视图
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 90, 40)];
label.backgroundColor = [UIColor greenColor];
self.navigationItem.titleView = label;

4.取得当前导航项,导航项是视图控制器的
self.navigationItem.title = @“”;

效果:



5.导航控制器的常用属性和方法

常用方法
//弹到上一个视图控制器 有动画效果
[self.navigationController popViewControllerAnimated:YES];
//弹到根视图控制器 有动画效果
[self.navigationController popToRootViewControllerAnimated:YES];
//弹到一个指定视图控制器 有动画效果
[self.navigationController popToViewController:<#(UIViewController *)#> animated:YES];

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

for (UIViewController *temp in self.navigationController.viewControllers) {
if ([temp isKindOfClass:[你要跳转到的Controller class]]) {
[self.navigationController popToViewController:temp animated:YES];
}
}

6.navigationBar设置导航栏风格和颜色

//设置导航栏颜色
navigation.navigationBar.barTintColor = [UIColor lightGrayColor];
//设置导航栏风格
navigation.navigationBar.barStyle = UIBarStyleBlackTranslucent;
//设置导航栏为透明
navigation.navigationBar.translucent = YES;
//设置导航栏背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"btn_02"] forBarMetrics:UIBarMetricsDefault];

7.UIBarButtonltem设置导航栏按钮 和 添加提示用输入的文字

UIBarButtonltem是用来显示导航栏左侧和右侧的按钮
UIBarButtonltem修改按钮时使用
//UIBarButtonItem第一种初始化方法,传入一个按钮名称,并实现一个方法
UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:self action:@selector(leftAction:)];
self.navigationItem.leftBarButtonItem = left;

//自定义返回按钮
UIBarButtonItem *btn = [UIBarButtonItem alloc] initWithCustomView:<#(UIView *)#>;
self.navigationItem.backBarButtonItem = btn;
//开启手势
navigation.interactivePopGestureRecognizer.delegate = self;

效果:








//UIBarButtonItem第二种初始化方法,传入一个按钮,
UIButton *right = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 30)];
[right setImage:[UIImage imageNamed:@"btn_02"] forState:UIControlStateNormal];
UIBarButtonItem *b = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.rightBarButtonItem = b;


效果:



//UIBarButtonItem第二种初始化方法,传入一张图片,
UIBarButtonItem *u = [[UIBarButtonItem alloc] initWithImage:(UIImage *) style:(UIBarButtonItemStyle) target:(id) action:(SEL)];




效果:





//修改返回标题
UIBarButtonItem *title = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:nil];
self.navigationItem.backBarButtonItem = title;


效果:



//设置提示框
self.navigationItem.prompt = @"载入";


3秒退出



8.导航控制器的委托方法

[b]通过设置代理监听视图控制器的切换
[/b]
//视图控制器将要显示时调用
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
NSLog(@"视图控制器将要显示");
}

//试图控制器已经显示时调用
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
NSLog(@"试图控制器已经显示");
}

9.导航控制器总结

[b]


[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: