UITabBarController 标签栏控制器-IOS开发 (实例)
在 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开发 (实例)相关推荐
- iOS:切换视图的第三种方式:UITabBarController标签栏控制器
UITabBarController:标签栏控制器 •通过设置viewControllers属性或者addChildViewController方法可以添加子控制器 –NSArray *viewCon ...
- Floodlight控制器简单开发实例完成Packet_In消息统计
一.案例分析 由于Packet-in消息是Floodlight诸多模块的处理重点,因此统计Packet-in消息在某一段时间的处理量可以在一定程度上反应系统处理性能,所以此案例开发Packet-in消 ...
- 文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍...
一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例 ...
- 生日和星座的自动匹配ios开发实例代码分享
//确定操作 - (void)pickRightClick { if(_pickRightButton){ _industry.text= _industyArray[_didSelectRow]; ...
- iOS开发中标签控制器的使用——UITabBarController
iOS开发中标签控制器的使用--UITabBarController 一.引言 与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理 ...
- IOS开发入门(11)-导航控制器(1)
IOS开发入门(11)-导航控制器I:层级结构和标签 前言:(直接从书上抄的) 大多数应用程序是由主视图导出多个屏幕,并且通常情况下实现屏幕切换的方法还不止一种.我们需要一种方式来实现用户在应用程序内 ...
- iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍) 本来仅仅是打算介绍一下addChildViewController这种方法的,正好今天朋友去换工作面试问 ...
- iOS开发UI篇—多控制器和导航控制器简单介绍
iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇-UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
最新文章
- 转载:SharePonit Host WCF 注意事项
- 基于vue2.0实现音乐/视频播放进度条组件的思路及具体实现方法+代码解释
- java replaceall正则表达式_编写高性能Java代码的最佳实践
- sklearn PCA特征降维
- 前端学习(487):css选择器下
- 怎么实现单点登录?面试必问!
- 我怕三十的红包太多,先发为敬!
- 利用Python获取数组或列表中最大的N个数及其索引
- 统计学课程学习【理论】数据的图标展示
- java ssm框架论文,ssm框架理解
- Windows强制删除文件的方法
- 乱了夏末蓝了海,伤了初冬白了城。
- 论文笔记:A novel DRM scheme for accommodating expectations of personal use
- 蓝奏批量替换自定义域名php源码
- 从rman 备份中恢复表
- JZOJ.4377[GDOI2016模拟3.10]习用之语 解题报告
- 门户网站常用SEO策略及操作规范
- NSN HLR simulator for provisioning in expect
- “超融合对战法”,带你杀出一条血路
- linux 查看mount参数,linux命令中的mount -f参数
热门文章
- 句向量的表示(上)—无监督
- 日语学习-多邻国-介绍
- 执行器接线图_风机盘管组装全过程,盘管与接管接线图,拿走不谢!
- post python爬虫_小白学 Python 爬虫(17):Requests 基础使用
- python求函数一二阶导_python:利用多种方式解微分方程(以二阶微分系统零状态响应为例)...
- Mybatis(2)-注解使用-IDEA
- v-for 循环 @click 动态传参(参数动态)
- vue 跨域问题 - 总结篇
- phpcmsV9怎样在单页中调用后台栏目SEO设置的Meta_title
- django上传文件到服务器,如何用django将文件上传到服务器?