18-UINavigationController 导航控制器

来源:互联网 发布:佛山网页美工培训 编辑:程序博客网 时间:2024/06/05 16:49
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.导航控制器的委托方法
通过设置代理监听视图控制器的切换
//视图控制器将要显示时调用- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{    NSLog(@"视图控制器将要显示");}//试图控制器已经显示时调用- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{    NSLog(@"试图控制器已经显示");}

9.导航控制器总结


0 1