zoukankan      html  css  js  c++  java
  • IOS ——UI篇——UINavigationController导航控制器的使用

    UINavigationController
     
     
     
    UINavigationController俗称导航控制器,可以看做是一个试图控制器的容器,主要用于试图控制器之间的沟通,一般作为根视图控制器使用
    1. 创建:在appdelegate里的didfinishlaunsh方法里创建,创建的同时需要给UINavigationController设置艮视图控制器:
    //首先创建自己的视图控制器
    ViewController *vc = [[ViewController alloc]init];
    //然后创建导航控制器,并且将上一步创建的ViewController对象设置为导航控制器的根控制器
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    //最后将导航控制器设置为窗口的根控制器
    self.window.rootViewController = nav;
    1. self.title = @"导航";//设置导航条在某试图控制器中的标题(在对应视图控制器中设置)
    2. self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName, nil];//修改标题颜色
    3. self.navigationController.navigationBar.translucent = NO;//设置导航条半透明状态,默认为yes,会遮挡住self.view的64像素的高度
    4. [self.navigationController.navigationBar setBarTintColor:[UIColor blackColor]];//设置navigationbar的颜色
    5. [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav_bg"] forBarMetrics:UIBarMetricsDefault];//设置背景图片(注意尺寸)
    6. self.navigationController.navigationBarHidden = YES;//隐藏导航条
      [self.navigationController setNavigationBarHidden:YES animated: YES];//隐藏导航条,是否带动画
    1. [self.navigationController pushViewController:sec animated:YES];//推到下一个视图
    2. [self.navigationController popViewControllerAnimated:YES];//返回上一级视图
    3. [self.navigationController popToRootViewControllerAnimated:YES];//退回到根视图
    4. (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; //返回指定视图
    5. UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:0];//获得导航控制器的viewcontrollers栈
    6. UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"返回"  style:UIBarButtonItemStylePlain  target:self  action:nil];//设置导航条返回按钮的标题
    self.navigationItem.backBarButtonItem = backButton;
    1. //自定义返回按钮:
         UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(10, 10, 40, 40);
        [button setTitle:@"返回" forState:UIControlStateNormal];
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithCustomView:button];
        self.navigationItem.leftBarButtonItem = left;
    //还可以initWithImage初始化成图片
        //还可以自定义,可以是任意一个UIView
        UIBarButtonItem *barBtn2=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(changeColor2)];
        UIBarButtonItem *barBtn3=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"logo-40@2x.png"] style:UIBarButtonItemStylePlain target:self action:@selector(changeColor3)];
        UIView *view4=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 20, 20)];
        view4.backgroundColor=[UIColor blackColor];
        UIBarButtonItem *barBtn4=[[UIBarButtonItem alloc]initWithCustomView:view4];
        NSArray *arr1=[[NSArray alloc]initWithObjects:barBtn2,barBtn3,barBtn4, nil];
        self.navigationItem.rightBarButtonItems=arr1;
     
    1. //自定义titleView
    UISegmentedControl *seg = [[UISegmentedControl alloc] initWithItems:@[@"1",@"2"]];
    seg.frame = CGRectMake(0, 10, 80, 20);
    self.navigationItem.titleView = seg;
     
    注意:
      1.navigationController 和  navigationItem这两个属性是平级的所以直接可以用self.navigationItem
      2. 用self.title = @"公交路线查询";方法设置的标题会受标签标题的影响;
    [self.navigationItem setTitle:@"公交路线查询"];//设置导航条标题(如果使用了tableBar,这种方式设置的标题不会受标签的标题的影响)
    self.navigationItem.title = @"宝妈圈";//设置导航条标题(如果使用了tableBar,这种方式设置的标题不会受标签的标题的影响)
     
    应用举例:
     
      1 #import "AppDelegate.h"
      2 #import "ViewController.h"
      3 @interface AppDelegate ()
      4 
      5 @end
      6 
      7 @implementation AppDelegate
      8 
      9 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     10 
     11     self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
     12     [self.window makeKeyAndVisible];
     13 
     14     ViewController *vc = [[ViewController alloc] init];//导航控制器的根视图
     15 
     16     UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];//初始化导航控制器
     17 
     18     self.window.rootViewController = nav;//设置window的根视图控制器为导航控制器
     19 
     20     return YES;
     21 }
     22 
     23 #import "ViewController.h"
     24 #import "SecondViewController.h"
     25 @interface ViewController ()
     26 
     27 @end
     28 
     29 @implementation ViewController
     30 
     31 -(void)viewWillAppear:(BOOL)animated{
     32     [super viewWillAppear:animated];
     33 
     34 }
     35 -(void)hidden{
     36 
     37    // [self.navigationController setNavigationBarHidden:YES animated:NO];
     38 }
     39 - (void)viewDidLoad {
     40     [super viewDidLoad];
     41     self.view.backgroundColor = [UIColor brownColor];
     42 
     43     //延迟调用
     44     [self performSelector:@selector(hidden) withObject:nil afterDelay:1];
     45 
     46     //导航条默认半透明,这时会遮挡self.view的64个像素的高度(tableView除外),为了避免这种情况,我们可以将导航条的半透明效果关掉
     47     self.navigationController.navigationBar.translucent = NO;//将导航条的半透明效果关掉
     48 
     49     self.title = @"导航条";//设置导航条标题
     50 [self.navigationItem setTitle:@"导航条"];//设置导航条标题(如果使用了tableBar,这种方式设置的标题不会受标签的标题的影响)
     51 self.navigationItem.title = @"导航条";//设置导航条标题(如果使用了tableBar,这种方式设置的标题不会受标签的标题的影响)
     52     self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName, nil];//修改标题颜色
     53 
     54     self.navigationController.navigationBar.barTintColor = [UIColor purpleColor];//导航条背景色修改
     55    //给导航条增加背景图片,其中forBarMetrics有点类似于按钮的for state状态,即什么状态下显示
     56     //UIBarMetricsDefault-竖屏横屏都有,横屏导航条变宽,则自动repeat图片
     57     //UIBarMetricsCompact-竖屏没有,横屏有,相当于之前老iOS版本里的UIBarMetricsLandscapePhone
     58     //UIBarMetricsCompactPrompt和UIBarMetricsDefaultPrompt暂时不知道用处,官方解释是Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar,以后遇到时再细说
     59     [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"big2.png"] forBarMetrics:UIBarMetricsDefault];
     60     //如果图片太大会向上扩展侵占状态栏的位置,在状态栏下方显示
     61     //clipsToBounds就是把多余的图片裁剪掉
     62     UILabel *la = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 64)];
     63     la.backgroundColor = [UIColor blackColor];
     64     [self.view addSubview:la];
     65 
     66     UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
     67     [btn setTitle:@"跳转" forState:UIControlStateNormal];
     68     btn.frame = CGRectMake(20, 100, 80, 80);
     69     btn.backgroundColor = [UIColor whiteColor];
     70     [btn addTarget:self action:@selector(gotoNext) forControlEvents:UIControlEventTouchUpInside];
     71     [self.view addSubview:btn];
     72 }
     73 -(void)gotoNext{
     74 
     75     SecondViewController *secondVc = [[SecondViewController alloc] init];
     76     //nav 跳转方式
     77     [self.navigationController pushViewController:secondVc animated:YES];
     78 
     79 }
     80 - (void)didReceiveMemoryWarning {
     81     [super didReceiveMemoryWarning];
     82     // Dispose of any resources that can be recreated.
     83 }
     84 
     85 @end
     86 
     87 //[self.navigationItem setHidesBackButton:YES];隐藏导航条上的返回按钮
     88  //自定义导航条左按钮
     89     UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
     90     [backBtn setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
     91     backBtn.frame = CGRectMake(0, 0, 30, 40);
     92 
     93     [backBtn addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
     94     UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
     95     self.navigationItem.leftBarButtonItem = item;
     96 
     97     // UIBarButtonItem *right = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil];
     98 
     99     //自定义导航条右按钮
    100     UIButton *rightBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    101     [rightBtn setImage:[UIImage imageNamed:@"chatWith"] forState:UIControlStateNormal];
    102     rightBtn.frame = CGRectMake(0, 0, 40, 30);
    103     [rightBtn addTarget:self action:@selector(chat) forControlEvents:UIControlEventTouchUpInside];
    104 
    105     UIBarButtonItem *right = [[UIBarButtonItem alloc] initWithCustomView:rightBtn];
    106 
    107     self.navigationItem.rightBarButtonItem = right;
    108 112 
    113 UISegmentedControl *seg = [[UISegmentedControl alloc] initWithItems:@[@"1",@"2"]];
    114     seg.frame = CGRectMake(0, 0, 80, 40);
    115 
    116     self.navigationItem.titleView = seg;//自定义导航条头视图
    117 
    118     self.navigationController.navigationBar.barTintColor = [UIColor orangeColor];
    119 
    120 -(void)backToHome{
    121    // [self.navigationController popToRootViewControllerAnimated:YES];//返回到nav的根视图
    122 
    123     //nav中所存放的vc对象数组
    124     NSArray *arr = self.navigationController.viewControllers;
    125     NSLog(@"==%@",arr);
    126 
    127     UIViewController *vc = [arr objectAtIndex:2];
    128 
    129     //跳转到指定VC对象,此VC必须存在于NAV的栈中
    130     [self.navigationController popToViewController:vc animated:YES];
    131 
    132 }
    133 
    134 //视图将要出现时调用的方法
    135 -(void)viewWillAppear:(BOOL)animated{
    136     [super viewWillAppear:animated];
    137     NSArray *arr = self.navigationController.viewControllers;//获取导航控制器中的 视图控制器
    138     NSLog(@"==%@",arr);
    139 
    140 }
     
    感谢您的访问! 若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)
  • 原文地址:https://www.cnblogs.com/Rong-Shengcom/p/4985642.html
Copyright © 2011-2022 走看看