一个、一个简单的制作过程(实际工程中不建议这样的方式,不要只展示所用原理的理解)

在AppDelegate.m在:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建一个到导航控制器
UIViewController *vc1=[[UIViewController alloc]init];
UINavigationController *nav1=[[UINavigationController alloc]initWithRootViewController:vc1];
nav1.title=@"首页";
//创建三个视图控制器
UIViewController *vc2=[[UIViewController alloc]init];
vc2.title=@"收藏";
UIViewController *vc3=[[UIViewController alloc]init];
vc3.title=@"搜索";
UIViewController *vc4=[[UIViewController alloc]init];
vc4.title=@"设置";
//创建一个数组把上面1个导航控制器和3个视图控制器的实例都装进去
NSArray *arr1=[[NSArray alloc]initWithObjects:nav1,vc2,vc3,vc4, nil];
//先实例化一个UITabBarController,然后把上面那个数组赋值给它的viewControllers属性
UITabBarController *tb1=[[UITabBarController alloc]init];
tb1.viewControllers=arr1;
//最重要的是把上面实例化的标签控制器赋值给self.window的rootViewController,这样才干显示,和之前说的导航控制器显示是一样的
self.window.rootViewController=tb1;
// Override point for customization after application launch.
return YES;
}

执行效果:

二、注意事项

(1)以上直接把数组赋值给标签控制器实例的viewControllers属性。而一般在做项目时不这样做,以上仅仅是演示整个原理实现的过程。

(2)UITabBarController有两个子视图,一个是UITabBar部分。它里面放得时UITabBarItem就是以下四个切换的标签那一块。还有一个是内容部分,就是几个视图。我们点击不同的标签,就会切换显示不同的视图。所以我们载入视图控制器的话,可能在针对视图那一块进行改动。而定制标签的话,是针对UITabBarItem进行改动。

(3)尺寸。UITabBarItem有图片icon也有文字,图片是50*50。详细的參数,点击这里



三、UITabBarItem属性介绍及6种创建方式

我们创建了6个视图控制器,然后把它们的头文件导入进来。所以在AppDelegate.m文件里:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//第一种方式:通过导航控制器的tabBarItem来调用image属性
ViewController *vc0=[[ViewController alloc]init];
UINavigationController *nav0=[[UINavigationController alloc]initWithRootViewController:vc0];
//用nav0.tabBarItem.title=@"界面1";来赋值标题时用.title取值取不到。
//用下面方式赋值标题,能够用.tabBarItem.title取值,可是下面方式直接把navigationItem.title也一并赋值了
//优先使用下面的方法
nav0.title=@"界面1";
//赋值图片
nav0.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"]; //另外一种方式:通过视图控制器的tabBarItem使用setFinishedSelectedImage方法。设置选中未选中图片状态
//只是这样的方法貌似不被推荐不能使用了,在iOS7中已被抛弃
//所以推荐使用initWithTitle:image:selectedImage:这个初始化方法
ViewController1 *vc1=[[ViewController1 alloc]init];
//vc1.title=@"界面2";
//[vc1.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"1@1x.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"1-selected@1x.png"]];
UITabBarItem *tb0=[[UITabBarItem alloc]initWithTitle:@"界面2" image:[UIImage imageNamed:@"Slice@1x.png"] selectedImage:[UIImage imageNamed:@"Slice-selected@1x.png"]];
vc1.tabBarItem=tb0; //第三种方式:通过视图控制器的tabBarItem来调用image属性
ViewController2 *vc2=[[ViewController2 alloc]init];
vc2.title=@"界面3";
vc2.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"]; //第四种方式:设置徽标,badgeValue是tabBarItem的一个属性,值是字符串
ViewController3 *vc3=[[ViewController3 alloc]init];
vc3.title=@"界面4";
vc3.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"];
vc3.tabBarItem.badgeValue=@"6"; //第五种方式:通过先设置一个系统自带的UITabBarItem,再把它赋值给视图控制器的tabBarItem
//用这样的方式创建后。再设置.title或者.tabBarItem.Image就不起作用了
ViewController4 *vc4=[[ViewController4 alloc]init];
UITabBarItem *tb1=[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0];
vc4.tabBarItem=tb1; //第六种方式:通过先初始化一个带有标题和图片的UITabBarItem,然后把它赋值给视图控制器的tabBarItem
//相当于分别对.title和.tabBarItem.image进行设置,效果是相似的
//这样的方式不推荐使用
ViewController5 *vc5=[[ViewController5 alloc]init];
UITabBarItem *tb2=[[UITabBarItem alloc]initWithTitle:@"界面6" image:[UIImage imageNamed:@"Slice@1x.png"] tag:1];
vc5.tabBarItem=tb2; //下面是整一个数组装上面的那些个,然后初始化一个UITabBarController再把数组赋值给UITabBarController的viewControllers属性
//最后别忘了,把window的根视图控制器改动一下
NSArray *arr2=[[NSArray alloc]initWithObjects:nav0,vc4,vc1,vc3,vc2,vc5, nil];
UITabBarController *tbCon1=[[UITabBarController alloc]init];
tbCon1.viewControllers=arr2;
self.window.rootViewController=tbCon1; // Override point for customization after application launch.
return YES;
}

(1)tabbar的图标仅仅能显示5个。多于5个则统统归置到more里面,这个more事系统自带的图标。

(2)主要由两种方式:一种是直接在利用已有的导航控制器或者视图控制器的.title和.tabBarItem.image属性来设置文字和图片。另一种是先创建一个UITabBarItem(文字未选中图片选中图片等)然后把这个UITabBarItem赋值给导航控制器或者视图控制器的.tabBarItem属性。

(3)推荐使用另外一种方法,由于它在创建UITabBarItem时能够一次性的把文字、选中图片、未选中图片等不同状态都定义出来。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

四、关于tabbar上得More

(1)当标签多余5个时,标签控制器会自己主动创建一个moreNavigationController。即我们点击More。它是一个导航控制器。

(2)点击More之后我们能够点击编辑。然后通过拖动相应的图标来又一次排列它们的显示顺序。

五、关于英文和中文语言的问题

我们上面的More和Edit都是英文。怎样显示成中文呢?须要用到本地化。

该程序默认仅仅提供英文一种语言,所以无论用户手机设置成什么语言,仅仅要涉及到系统自带的文字都会是英文。我们须要给程序设置成两种语言(中文和英文)。这样程序会依据用户手机的语言设置显示对应的语言。

方法:在Info.plist中添加一个Localizations,并给这个Localizations添加一个选项是中文简体(默认仅仅有英文)。

如此。打完收工!

(假设你的文字仍然是英文,那么点击CMD+SHIFT+H回主界面,然后Setting转到模拟器语言可以设置为简体中国)

版权声明:本文博客原创文章,博客,未经同意,不得转载。

【iOS发展-28】制造业UITabBarController标记控制器、定制UITabBarItem文字图像6途径和More评论的更多相关文章

  1. iOS学习28之UITabBarController

    1. 标签视图控制器 -- UITabBarController 视图(UIView) ---> 图层 ---> 子视图 视图控制器(UIViewController) ---> 管 ...

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

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

  3. iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建)

    iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建)   一.UITabBarController在storyoard中得搭建 1.新建一个项目,把storyb ...

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

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

  5. iOS发展 - 使用您自己的自定义字体

    一位同事问我最后一次,XXapp字体如何萌啊? 我也想提出萌哒哒的字体!然后,今天有这blog. 首先,我们正处于iOS发展,苹果给了我们很多的字体,当然,我就不一一列举在这里,英文,小汤表示看不懂啦 ...

  6. UITabBarController 标签栏控制器

    接上篇导航控制器UINavigationController 接下来是UITabBarController 标签栏控制器 先来看一下UITabBarController的结构 从图上可以看出控制器分为 ...

  7. iOS:给标签栏控制器的UITabbarItem添加点击动效

    一.介绍 现在很多app,附带很炫的点击效果,让用户享受到非常棒的体验,例如动画.渐变.音效等. 当然,市面上大多数app的标签栏点击还是挺中规中矩的,只是切换图片而已.然而,这个是可以优化的,附带点 ...

  8. iOS 11开发教程(八)定制iOS11应用程序图标

    iOS 11开发教程(八)定制iOS11应用程序图标 在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以下就来实现在iOS模拟器上将 ...

  9. 项目架构(结构)搭建:主流结构(UITabBarController + 导航控制器)

    /* 项目架构(结构)搭建:主流结构(UITabBarController + 导航控制器) -> 项目开发方式 1.storyboard 2.纯代码 */ @interface AppDele ...

随机推荐

  1. Android Wear 数据类型和接口的发送和同步数据概述

    Android Wear数据层API,这是google play service部分,通信信道,以你的手持设备和耐磨应用. Api它包含一系列数据对象,可以让系统通过监控和通知行app重要的事件数据层 ...

  2. MyBatis+Spring+Spring MVC整合开发

    MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...

  3. 第4周 页面限制8060 bytes

    原文:第4周 页面限制8060 bytes 恭喜您!在你面前就只剩下几页了,然后你就可以完成第1个月的SQL Server性能调优培训了.今天我将讲下页的一些限制,还有为什么你会喜欢这些限制,同时也会 ...

  4. 【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

    现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. ...

  5. 动态创建ImageView

    1.布局文件 <LinearLayout android:id="@+id/viewGroup" android:layout_width="wrap_conten ...

  6. Oracle如何插入在特殊字符: &amp; 和 &#39; (各种解决方案)

    分类: Oracle Oracle中怎样插入特殊字符:& 和 ' (多种解决方式) 今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自己定义变量AMP赋值,一開始我非常 ...

  7. bzoj 1874 取石子游戏 题解 &amp; SG函数初探

    [原题] 1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 334  Solved ...

  8. win32加载图片获得像素值

    在写光栅渲染器时,需要加载图片获得像素以便进行纹理插值,试了几种方法发现下面这种比价简单,效率也可以接受 Texture2D是我自己定义的类,其中m_pixelBuffer是一个动态二维数组,每个元素 ...

  9. Swift String length property

    Swift的String居然没有length属性,好难受,每次要获取String的字符串长度都要借助全局函数countElements. 没办法.仅仅有扩展String结构体,给它加入一个属性了. i ...

  10. POJ 1915-Knight Moves (单向BFS &amp;&amp; 双向BFS 比)

    主题链接:Knight Moves 题意:8个方向的 马跳式走法 ,已知起点 和终点,求最短路 研究了一下双向BFS,不是非常难,和普通的BFS一样.双向BFS只是是从 起点和终点同一时候開始搜索,可 ...