(三)UITabBarController和UITabBar的基

作者: IIronMan | 来源:发表于2016-04-19 10:44 被阅读1109次

    一、分栏控制器的基本概念(分栏控制器也是一个容器)

    1、UITabBarController和UINavigationController一样是用来管理试图控制器的

    2、与导航控制器不同,tabBarController控制器使用数组管理子试图控制器的,并且子试图之间是平等关系,导航控制器所管理的试图控制器之间是在出桟和入桟的关系

    二、分栏试图控制器的结构

    1、有两部分组成

     1)contentView:显示当前controller的view
    
     2) tabBar(标签栏):负责切换显示controller, 高度为49(相对于NavigationBar的优势在于可以使用户选择明确)
    

    2、tabBar(标签栏)

      1) 标签栏是唯一的,就好比导航控制器的导航栏(Bar栏)
    
      2) .给分栏控制器和子控制器设置颜色 barTintColor
          
          (1)分栏控制器和子控制器设置颜色
           
           UITabBarController *tabBarC = [[UITabBarController alloc]init];//先创建分栏控制器,在给它设置颜色
           tabBarC.tabBar.barTintColor = [UIColor orangeColor];
          
          (2)子控制器设置颜色
    
           self.tabBarController.tabBar.tintColor = [UIColor redColor]; //改变的是选中状态是下面字体和小图标的颜色
      
      3) 设置分栏的背景图片
    
         backgroundImage//首先要有一个分栏控制器的对象
         tabBarC.tabBar.backgroundImage = [UIImage imageNamed:@"tupian"];  
      
      4)标签栏的显示与隐藏
    
         hidden   
         tabBarC.tabBar.hidden = YES;//前提也是有一个分栏控制器的对象
    
      5)设置导航控制器默认显示的控制器( 默认界面显示数组里面第一个 下表为0的控制器的界面)
    
         selectedIndex
        tabBarC.selectedIndex = 2;//数组里面的第三个
    

    3、tabBarItem

      1) 用来控制一组控制器的切换,类似选项卡,每个Tab控制一个试图控制器,点击哪个tab就显示对应的试图控制器,当前的试图控制器
    
      2) 每个tabBarItem都可以设置title、image/selectedImages、badgeValue
      例如:
        
        (1).给当前的分栏控制器的item设置一个标题
              self.tabBarItem.title = @"我的";
        (2).给当前的分栏控制器的item设置一个图片
              
              self.tabBarItem.image = [UIImage imageNamed:@"tab_buddy_nor@2x"];
        (3).给当前的分栏控制器的item设置一个选中状态的图片
              
              self.tabBarItem.selectedImage = [UIImage imageNamed:@"tab_me_nor@2x"];//@2x表示给高清屏 30*30的效果好
    
              self.tabBarItem.badgeValue = @"new";//在小图标的上面家字体加字体
    
      3) 设置选中的颜色
    
         分栏控制器.tabBar.tintColor
         self.tabBarController.tabBar.tintColor = [UIColor redColor]; 
    
      3) TabBar只能显示五个tab Item,如果超过五个则会自动生成个Morede 标签显示剩余的Tab,这些Tab可以通过编辑显示在UITabBar上(打开页面后自动显示在界面,点击tabBar右边)
    
      4) 自定义Item 
    
         [UITabBarItem alloc]initWithTitle: image: tag:
    
         [UITabBarItem alloc]initWithTabBarSystemItem:tag:
    

    4、支持国际化(上面在多个视图控制器,可以在编辑那里改变字体的颜色)

      1)找到plist文件
    
      2)右键  add row  
    
      3)Localizations   默认就一个ENGLISH
    
      4)在 添加一个 Item 1  Chinese (simplified)
    

    三、代理监听分栏控制器的切换

    1、视图将要切换时调用,viewController为将要显示的控制器,如果返回的值为NO,则无法点击其它分栏了(viewController指代将要显示的控制器)
    
    - (BOOL)tabBarController:(UITabBarController *)tabBarController  shouldSelectViewController:(UIViewController *)viewController
     例如1:
    
    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
    
       NSLog(@"被选中的控制器将要显示的按钮");
       //return NO;不能显示选中的控制器
       return YES;
    
    }
     2、视图已经切换后调用,viewController 是已经显示的控制器
    
    - (void)tabBarController:(UITabBarController *)tabBarControllerdidSelectViewController:(UIViewController *)viewController 
     例如2:
     - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
    {
      NSLog(@"视图显示后调用");
    }
     3、将要开始自定义item的顺序
    
    - (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers 
      例如3
    
    - (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers
    {
    
          NSLog(@"将要开始自定义item时调用");
    
          NSLog(@"%@",viewControllers);
    }
     4、将要结束自定义item的顺序
    
    - (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed 
    例如4
      
     - (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
    
    {
    
           NSLog(@"将要结束自定义item时调用");
    
           NSLog(@"%@",viewControllers);
    }
    
    
    5、结束自定义item的顺序
    
    - (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed 
      例如5:
     - (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
    {
    
        NSLog(@"已经结束自定义item顺序时调用");
    
        NSLog(@"%@",viewControllers);
    }
    

    四、集成分栏控制器和导航控制器

    1、在Tab Bar控制器中某一个Tab中使用Navigation控制器,这是最常见的用法

    2、在一个Navigation控制器控制下的某一个或某些控制器是Tab Bar控制器,这时对该Tab Bar控制器的压入和弹出方法和普通视图控制器一样(上节课讲解的四种方法)

    五、总结

    1、UINavigationController、UITabBarController和UIViewController通常都是组合出现的,一定要熟练使用

    2、UINavigationController、UITabBarController都是UIViewController的子类,管理的都是UIViewContrller

    3、UINavigationController可以嵌套UITabBarController

    4、UITabBarController可以嵌套UINavigationController

    六.感悟

    不管是UINavigationController还是UITabBarController都是容器,都主要要一个界面去显示它(也叫作根控制器)

    相关文章

      网友评论

      本文标题:(三)UITabBarController和UITabBar的基

      本文链接:https://www.haomeiwen.com/subject/dgwalttx.html