iOS开发制造一个UITabBarController标签控制器、定制UITabBarItem文字图片的6种方式以及More

转载自:

一、一个简单的创造过程(实际项目不推荐这种方式,仅做演示理解原理用)


在AppDelegate.m中:

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
//创建一个到导航控制器  
    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 nil];  
    //先实例化一个UITabBarController,然后把上面那个数组赋值给它的viewControllers属性  
    UITabBarController *tb1=[[UITabBarController alloc]init];  
    tb1.viewControllers=arr1;  
    //最重要的是把上面实例化的标签控制器赋值给self.window的rootViewController,这样才能显示,和之前说的导航控制器显示是一样的  
    self.window.rootViewController=tb1;  
运行效果:


二、注意事项


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


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


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


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


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

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  2.     //第一种方式:通过导航控制器的tabBarItem来调用image属性  
  3.     ViewController *vc0=[[ViewController alloc]init];  
  4.     UINavigationController *nav0=[[UINavigationController alloc]initWithRootViewController:vc0];  
  5.     //用nav0.tabBarItem.title=@"界面1";来赋值标题时用.title取值取不到,  
  6.     //用以下方式赋值标题,可以用.tabBarItem.title取值,但是以下方式直接把navigationItem.title也一并赋值了  
  7.     //优先使用以下的方法  
  8.     nav0.title=@"界面1";  
  9.     //赋值图片  
  10.     nav0.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"];  
  11.       
  12.     //第二种方式:通过视图控制器的tabBarItem使用setFinishedSelectedImage方法,设置选中未选中图片状态  
  13.     //不过这种方法貌似不被推荐不能使用了,在iOS7中已被抛弃  
  14.     //所以推荐使用initWithTitle:image:selectedImage:这个初始化方法  
  15.     ViewController1 *vc1=[[ViewController1 alloc]init];  
  16.     //vc1.title=@"界面2";  
  17.     //[vc1.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"1@1x.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"1-selected@1x.png"]];  
  18.     UITabBarItem *tb0=[[UITabBarItem alloc]initWithTitle:@"界面2" image:[UIImage imageNamed:@"Slice@1x.png"] selectedImage:[UIImage imageNamed:@"Slice-selected@1x.png"]];  
  19.     vc1.tabBarItem=tb0;  
  20.       
  21.     //第三种方式:通过视图控制器的tabBarItem来调用image属性  
  22.     ViewController2 *vc2=[[ViewController2 alloc]init];  
  23.     vc2.title=@"界面3";  
  24.     vc2.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"];  
  25.       
  26.     //第四种方式:设置徽标,badgeValue是tabBarItem的一个属性,值是字符串  
  27.     ViewController3 *vc3=[[ViewController3 alloc]init];  
  28.     vc3.title=@"界面4";  
  29.     vc3.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"];  
  30.     vc3.tabBarItem.badgeValue=@"6";  
  31.       
  32.     //第五种方式:通过先设置一个系统自带的UITabBarItem,再把它赋值给视图控制器的tabBarItem  
  33.     //用这种方式创建后,再设置.title或者.tabBarItem.Image就不起作用了  
  34.     ViewController4 *vc4=[[ViewController4 alloc]init];  
  35.     UITabBarItem *tb1=[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0];  
  36.     vc4.tabBarItem=tb1;  
  37.       
  38.     //第六种方式:通过先初始化一个带有标题和图片的UITabBarItem,然后把它赋值给视图控制器的tabBarItem  
  39.     //相当于分别对.title和.tabBarItem.image进行设置,效果是类似的  
  40.     //这种方式不推荐使用  
  41.     ViewController5 *vc5=[[ViewController5 alloc]init];  
  42.     UITabBarItem *tb2=[[UITabBarItem alloc]initWithTitle:@"界面6" image:[UIImage imageNamed:@"Slice@1x.png"] tag:1];  
  43.     vc5.tabBarItem=tb2;  
  44.       
  45.     //以下是整一个数组装上面的那些个,然后初始化一个UITabBarController再把数组赋值给UITabBarController的viewControllers属性  
  46.     //最后别忘了,把window的根视图控制器修改一下  
  47.     NSArray *arr2=[[NSArray alloc]initWithObjects:nav0,vc4,vc1,vc3,vc2,vc5, nil nil];  
  48.     UITabBarController *tbCon1=[[UITabBarController alloc]init];  
  49.     tbCon1.viewControllers=arr2;  
  50.     self.window.rootViewController=tbCon1;  
  51.       
  52.     // Override point for customization after application launch.  
  53.     return YES;  
  54. }  

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


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


(3)推荐使用第二种方法,因为它在创建UITabBarItem时可以一次性的把文字、选中图片、未选中图片等不同状态都定义出来。


四、关于tabbar上得More


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


(2)点击More之后我们可以点击编辑,然后通过拖动对应的图标来重新排列它们的显示顺序。


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


我们上面的More和Edit都是英文,如何显示成中文呢?需要用到本地化。该程序默认只提供英文一种语言,所以不管用户手机设置成什么语言,只要涉及到系统自带的文字都会是英文。我们需要给程序设置成两种语言(中文和英文),这样程序会根据用户手机的语言设置显示相应的语言。


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



如此,打完收工!(如果你的文字仍然是英文,那么点击CMD+SHIFT+H回到主界面,然后到Setting中去把模拟器语言设置成简体中文即可)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值