直接在TarBarController中操作,代码如下:

#import "DLTabBarController.h"
#import "ViewController.h"
#import "TwoViewController.h"
#import "ThreeViewController.h"
#import "FourViewController.h"
#import "FiveViewController.h"
#import "DLNavigationController.h" #define kClassKey @"rootVCClassString" // 控制器对应的字符串
#define kTitleKey @"title" // title可以当做tabBarItem的title属性
#define kImageKey @"imageName" // image显示
#define kSelImageKey @"selectedImageName" // 被选中后的image显示
#define kNavigationTitleKey @"navigationItemTitle" // navigationItem的title属性 @interface DLTabBarController () @end @implementation DLTabBarController - (void)viewDidLoad {
[super viewDidLoad]; // 构造数组(为了防止控制器写错,应该现在外面写好后再复制粘贴进去)
NSArray *childItemsArray = @[
@{
kClassKey : @"ViewController",
kTitleKey : @"首页",
kImageKey : @"home",
kSelImageKey : @"home_select",
kNavigationTitleKey : @"首页"
},
@{
kClassKey : @"TwoViewController",
kTitleKey : @"分类",
kImageKey : @"category",
kSelImageKey : @"category_select",
kNavigationTitleKey : @"分类"
},
@{
kClassKey : @"ThreeViewController",
kTitleKey : @"",
kImageKey : @"center",
kSelImageKey : @"center_select",
kNavigationTitleKey : @"home"
},
@{
kClassKey : @"FourViewController",
kTitleKey : @"购物车",
kImageKey : @"cart",
kSelImageKey : @"cart_select",
kNavigationTitleKey : @"购物车"
},
@{
kClassKey : @"FiveViewController",
kTitleKey : @"我",
kImageKey : @"mine",
kSelImageKey : @"mine_select",
kNavigationTitleKey : @"我"
}
]; // 遍历字典得到对应的属性
[childItemsArray enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL * _Nonnull stop) { UIViewController *vc = [[NSClassFromString(dict[kClassKey]) alloc] init];
vc.navigationItem.title = dict[kNavigationTitleKey];
vc.tabBarItem.title = dict[kTitleKey]; DLNavigationController *nav = [[DLNavigationController alloc] initWithRootViewController:vc]; vc.tabBarItem.image = [[UIImage imageNamed:dict[kImageKey]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
vc.tabBarItem.selectedImage = [[UIImage imageNamed:dict[kSelImageKey]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; [self addChildViewController:nav];
}]; }

本人是很喜欢这种做法的,虽然在写 key 对应的值的时候可能出错。但是对于后面的操作我们可以省去不少的代码。所以我在项目中基本都用户这个操作

iOS 一种很方便的构造TarBar的更多相关文章

  1. iOS五种本地缓存数据方式

    iOS五种本地缓存数据方式   iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  2. IOS三种归档(NSKeyArchieve)的总结

    IOS三种归档(NSKeyArchieve)的总结 归档是一种IOS中常用来存储文件的一种方法,在面向对象的语言中,归档也就实际上可以将一切对象存储在文件中,以下是IOS开发中常见的三种文件归档方式, ...

  3. 一种很有意思的数据结构:Bitmap

    昨晚遇到了一种很有意思的数据结构,Bitmap. Bitmap,准确来说是基于位的映射.其中每个元素均为布尔型(0 or 1),初始均为 false(0).位图可以动态地表示由一组无符号整数构成的集合 ...

  4. iOS 两种不同的图片无限轮播

    代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...

  5. GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

    1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...

  6. 介绍一种很棒的wince 如何替换系统声音的方法

    Topic:介绍一种很棒的wince 如何替换系统声音的方法(作者:Baiduluckyboy) //------------------------------------------------- ...

  7. iOS,几种设计模式

    1.单例模式 2.观察者模式 3.委托代理 4.block回调 5.反射机制 单例模式 iOS单例模式的2种方式.根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的 ...

  8. iOS 三种录制视频方式

    随着每一代 iPhone 处理能力和相机硬件配置的提高,使用它来捕获视频也变得更加有意思.它们小巧,轻便,低调,而且与专业摄像机之间的差距已经变得非常小,小到在某些情况下,iPhone 可以真正替代它 ...

  9. iOS四种多线程(swift和oc)

    在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 ...

随机推荐

  1. Invalid bound statement (not found): com.xxxx.dao.other.LoginDao.getUser"

    原来是能正常运行的,后想把登录相关的调整一下目录,对应登录的文件都调整到了other下边,启动服务,请求时报错: Invalid bound statement (not found): com.xx ...

  2. (排序)P1177 【模板】快速排序

    题解: 这道题用传统快排(如下所示)的结果就是最后三个点TLE: 如果永远取第一个元素作为枢轴的话,在数组已经有序的情况下每次划分都将得到最坏的结果,时间复杂度退化为O(n^2).因为其中一个子序列每 ...

  3. 51nod 1305:Pairwise Sum and Divide

    1305 Pairwise Sum and Divide 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有这样一段 ...

  4. 51nod 1013:3的幂的和 快速幂

    1013 3的幂的和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 求:3^0 + 3^1 +...+ 3^(N) mod 1000000007 ...

  5. C#调用C++系列二:传结构体

    这一篇记录下C#调用C++的结构体的方式来使用OpenCV的数据格式,这里会有两种方式,第一种是C#传一个结构体和图像的路径给C++,然后C++将图像加载进来,再把传进来的结构体填满即可,第二种是C# ...

  6. Java8集合框架——LinkedList源码分析

    java.util.LinkedList 本文的主要目录结构: 一.LinkedList的特点及与ArrayList的比较 二.LinkedList的内部实现 三.LinkedList添加元素 四.L ...

  7. 四、python杂项

    一.pycharm单行和多行注释快捷键                        多行注释就一个组合键:选中+Ctrl+/

  8. docker 批量命令

    docker中 启动所有的容器命令: docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker中    关闭所有的容器命 ...

  9. STM32F407读编码器没上拉电阻遇见的问题

    在调试之前由于本科阶段参加飞思卡尔智能汽车的竞赛,一直在使用与竞赛相关的单片机和编码器,后来由于工程的需要开始使用STM32的板子,在调试编码器的时候遇见了,使用了STM32的官方标准库中的定时器正交 ...

  10. 关于python请求库Selenium安装所遇到的问题

    今天,初次接触python,在网上买了一本关于爬虫的书,因为之前电脑上存在python,所以就对着书直接进行的请求库的安装,安装的时候,主要遇到了下边一个问题,在安装Selenium的时候,出现以下提 ...