直接在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. 201809-1 卖菜 Java

    思路: 需要两个数组,一个保存原始数据 import java.util.Scanner; public class Main { public static void main(String[] a ...

  2. HashMap源码阅读笔记

    HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述   HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如 ...

  3. 18 12 23 html 基本学习

    一个html的基本结构如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  4. kube-proxy详解

    KUBE_LOGTOSTDERR="--logtostderr=true"KUBE_LOG_LEVEL="--v=4"NODE_HOSTNAME="- ...

  5. 技术沙龙|京东云区块链进校园-京东云&深圳大学线下沙龙分享回顾

    在刚刚结束的京东云&深圳大学技术沙龙活动中,多位京东云的技术大咖针对京东云BDS产品技术细节.开源计划,与深圳大学的同学和参会者进行了深入探讨,干货满满反响深刻,获得了在场同学与参会者的一致好 ...

  6. [CISCN2019 华北赛区 Day1 Web1]Dropbox-phar文件能够上传到服务器端实现任意文件读取

    0x00知识点 phar是什么: 我们先来了解一下流包装 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://.例如常见的 include('php ...

  7. vue项目开始 首页 part1

    stylus 优点:css之中使用一些变量,方便我们快速编写css 项目中我们使用css开发的辅助工具帮助我们开发网站样式 安装:终端打开我们项目的文件夹 npm install stylus --s ...

  8. vue 动画框架Animate.css @keyframes

    <script src="vue.js"></script> <link rel="stylesheet" href=" ...

  9. Idea Spring工程不识别注解

    如图所示 Idea工具报出很多注解不识别,开始怀疑是 工具问题,重装Idea.配置lombak都不行,切换分支发现正常,一定是合入代码修改啥了,一行行比对,果然是这行 import org.sprin ...

  10. MySQL--基础SQL--DML

    1.插入记录 INSERT INTO tablename (fields1, fields2, ..., fieldsn) VALUES (value1, value2, ..., valuen) 例 ...