在 UIKit 中UITabbar 代表了标签栏,而 UITabBarController 对其进行了封装,令多个不同的视图管理与切换变的更加轻松。

构建一个标签栏控制器,首先要为每个按钮准备一个单独的页。每一页都应被创建为UIViewController对象。

构建一个控制器数组:

你的应用程序可能有多个不同的试图控制器,来实现不同的功能。如果你在写一个音乐播放器,可能会有一些控制器,如:MusicList、CurrentPlay、Favourite、SingerList、Settings 等。在创建你的标签栏之前,你应该首先创建一个数组,在其中放置你希望在标签栏中显示的视图控制器对象。

 //生成各个视图控制器MusicList* musicList = [[[MusicList alloc]init]autorelease];CurrentPlay* currentPlay = [[[CurrentPlay alloc]init]autorelease];Favourite* favourite = [[[Favourite alloc]init]autorelease];SingerList* singerList = [[[SingerList alloc]init]autorelease];Settings* settings = [[[Settings alloc]initWithStyle:UITableViewStyleGrouped]autorelease];
//加入一个数组    NSArray* controllerArray = [[NSArray alloc]initWithObjects:musicList,currentPlay,favourite,singerList,settings ,nil];

配置按钮属性:

每个标签栏都有他自己的“标签”,定义了他的标签按钮是什么样子。在视图控制器的 init 方法中,可以配置标签栏按钮,定义视图的标题与/或 tabBarItem 属性:

- (id)initWithStyle:(UITableViewStyle)style{self = [super initWithStyle:style];if (self) {self.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"Settings" image:[UIImage imageNamed:@"Setting"] tag:4];}return self;
}

请将 tabBarItem 属性设置为一个 UITabBarItem 对象。你有两种方法可以初始化标签栏中的项目。一种是initWithTitle 可以让你自定义标题和图像等数据来显示按钮。另一种就是创建系统提供的按钮。后者如下:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {self.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:2];}return self;
}

系统提供的按钮如下:

typedef enum {UITabBarSystemItemMore,UITabBarSystemItemFavorites,UITabBarSystemItemFeatured,UITabBarSystemItemTopRated,UITabBarSystemItemRecents,UITabBarSystemItemContacts,UITabBarSystemItemHistory,UITabBarSystemItemBookmarks,UITabBarSystemItemSearch,UITabBarSystemItemDownloads,UITabBarSystemItemMostRecent,UITabBarSystemItemMostViewed,
} UITabBarSystemItem;

显示标签栏控制器:

标签栏所需的各个控制器都好了,现在就可以生成我们的标签栏控制器了。忘了讲了,控制器我是在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  中生成的。

//创建UITabBarController控制器  UITabBarController* tabBarController = [[UITabBarController alloc]init];
//设置UITabBarController控制器的viewControllers属性为我们之前生成的数组controllerArraytabBarController.viewControllers = controllerArray;
//    默认选择第2个视图选项卡(索引从0开始的)tabBarController.selectedIndex = 1;
//    把tabBarController的view作为子视图添加到window[self.window addSubview:tabBarController.view];

可定制按钮

默认情况下,当按钮多于5个时,标签栏控制器允许拥护对按钮布局进行定制。要做到这一点,可以单击标有“更多”的标签,然后单击随之出现的导航栏上的编辑按钮。你可以选择只对某些特定的标签进行定制,也可以完全禁止定制。要允许定制,请将标签栏控制器的 customizableViewControllers 设置为一个数组,数组中包含有你希望用户进行定制的试图控制器:

导航

当标签栏控制器被显示时,控制器自己处理导航操作,会将选中标签对应视图自动切换到屏幕前端。要读取或者更改当前活动的试图控制器,可以使用 selectedViewController 属性:

  tabBarController.selectedViewController = musicList;//读取UIViewController* activeController = tabBarController.selectedViewController;if(activeController == musicList){//}

也可以使用索引:

tabBarController.selectedIndex = 1;

委托代理

要在标签栏上的视图被选中时得到通知,请赋予标签栏控制器一个委托:

tabBarController.delegate = self;

委托会在选中一个tab时得到通知,然后 didSelectViewController 的委托方法会被调用:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{/*添加代码,处理定制标签栏结束之后的操作*/
}

至此结束,最后附上代码工程文件。
UITabBarViewControllerDemo

来源:http://blog.csdn.net/iukey/article/details/7318290

UITabBarController 标签栏控制器-IOS开发 (实例)相关推荐

  1. iOS:切换视图的第三种方式:UITabBarController标签栏控制器

    UITabBarController:标签栏控制器 •通过设置viewControllers属性或者addChildViewController方法可以添加子控制器 –NSArray *viewCon ...

  2. Floodlight控制器简单开发实例完成Packet_In消息统计

    一.案例分析 由于Packet-in消息是Floodlight诸多模块的处理重点,因此统计Packet-in消息在某一段时间的处理量可以在一定程度上反应系统处理性能,所以此案例开发Packet-in消 ...

  3. 文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍...

    一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例 ...

  4. 生日和星座的自动匹配ios开发实例代码分享

    //确定操作 - (void)pickRightClick { if(_pickRightButton){ _industry.text= _industyArray[_didSelectRow]; ...

  5. iOS开发中标签控制器的使用——UITabBarController

    iOS开发中标签控制器的使用--UITabBarController 一.引言 与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理 ...

  6. IOS开发入门(11)-导航控制器(1)

    IOS开发入门(11)-导航控制器I:层级结构和标签 前言:(直接从书上抄的) 大多数应用程序是由主视图导出多个屏幕,并且通常情况下实现屏幕切换的方法还不止一种.我们需要一种方式来实现用户在应用程序内 ...

  7. iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

    iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍) 本来仅仅是打算介绍一下addChildViewController这种方法的,正好今天朋友去换工作面试问 ...

  8. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  9. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇-UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

最新文章

  1. 转载:SharePonit Host WCF 注意事项
  2. 基于vue2.0实现音乐/视频播放进度条组件的思路及具体实现方法+代码解释
  3. java replaceall正则表达式_编写高性能Java代码的最佳实践
  4. sklearn PCA特征降维
  5. 前端学习(487):css选择器下
  6. 怎么实现单点登录?面试必问!
  7. 我怕三十的红包太多,先发为敬!
  8. 利用Python获取数组或列表中最大的N个数及其索引
  9. 统计学课程学习【理论】数据的图标展示
  10. java ssm框架论文,ssm框架理解
  11. Windows强制删除文件的方法
  12. 乱了夏末蓝了海,伤了初冬白了城。
  13. 论文笔记:A novel DRM scheme for accommodating expectations of personal use
  14. 蓝奏批量替换自定义域名php源码
  15. 从rman 备份中恢复表
  16. JZOJ.4377[GDOI2016模拟3.10]习用之语 解题报告
  17. 门户网站常用SEO策略及操作规范
  18. NSN HLR simulator for provisioning in expect
  19. “超融合对战法”,带你杀出一条血路
  20. linux 查看mount参数,linux命令中的mount -f参数

热门文章

  1. 句向量的表示(上)—无监督
  2. 日语学习-多邻国-介绍
  3. 执行器接线图_风机盘管组装全过程,盘管与接管接线图,拿走不谢!
  4. post python爬虫_小白学 Python 爬虫(17):Requests 基础使用
  5. python求函数一二阶导_python:利用多种方式解微分方程(以二阶微分系统零状态响应为例)...
  6. Mybatis(2)-注解使用-IDEA
  7. v-for 循环 @click 动态传参(参数动态)
  8. vue 跨域问题 - 总结篇
  9. phpcmsV9怎样在单页中调用后台栏目SEO设置的Meta_title
  10. django上传文件到服务器,如何用django将文件上传到服务器?