(三)UITabBarController和UITabBar的基本用法

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

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都是容器,都主要要一个界面去显示它(也叫作根控制器)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容