TabBarController的使用,下面记录两种写法,代码如下:

TabBarItem系统自带图标样式(System)介绍:
Custom:自定义方式,配合Selected Image来自定义图标
More:三个点的图标,表示更多意思
Favorites:星形图标
Featured:星形图标
Top Tated:星形图标
Recents:时钟图标
Contacts:一个圆形一个人头像的图标,代表联系方式
History:时钟图标
Bookmarks:书本图标
Search:放大镜图标,代表搜索的意思
Downloads:正方形,加一个向下的箭头,代表下载的意思
Most Recent:时钟图标
Most Viewed:三条杠的笔记本纸片图标

第一种,传统的写法,如下:

1,创建一个继承与UITabViewController的类

class MainVC: UITabBarController

2,具体实现方法如下:

 //包含的视图
let mainVC = ViewController()
mainVC.title = "首页"
let groupVC = FirstViewController()
groupVC.title = "群组"
let tenthVC = TenthViewController()
tenthVC.title = "我的" //声明视图控制器
let main = UINavigationController(rootViewController:mainVC)
main.tabBarItem.image = UIImage(named:"Person")
main.tabBarItem.selectedImage = UIImage(named:"Person_se")
//定义tab按钮添加个badge小红点值
main.tabBarItem.badgeValue = "!" //声明视图控制器
let group = UINavigationController(rootViewController:groupVC)
group.tabBarItem.image = UIImage(named:"Person")
main.tabBarItem.selectedImage = UIImage(named:"Person_se")
//定义tab按钮添加个badge小红点值
group.tabBarItem.badgeValue = "!" //声明视图控制器
let mine = UINavigationController(rootViewController:tenthVC)
mine.tabBarItem.image = UIImage(named:"Person")
main.tabBarItem.selectedImage = UIImage(named:"Person_se")
//定义tab按钮添加个badge小红点值
mine.tabBarItem.badgeValue = "!" self.selectedIndex =
//self.tabBarItem.selectedImage = UIImage(named:"Person_se")
self.viewControllers = [main,group,mine]

效果如下:

第二种方法,for循环,比较简便,不过需要注意一个点,代码如下:

1,声明

let nameAry = ["首页","分类","我的"]
let picAry = ["contact","Event","Person"]
let picSelectedAry = ["contact_se","Event_se","Person_se"]
let VCAry = [ViewController(),FirstViewController(),TenthViewController()]
//初始化数组
var navVCAry:[NSObject] = [NSObject]() var nav:UINavigationController = UINavigationController()

2,具体代码使用for循环实现:

 func creatTabbar(){

        for M in ..<VCAry.count {
nav = UINavigationController(rootViewController:(VCAry[M]))
nav.tabBarItem.title = nameAry[M]
//设置tabbaritem的字体颜色和字体大小(选中与未选中效果)
nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.black,NSFontAttributeName:UIFont.systemFont(ofSize: )], for: .normal)
nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.cyan,NSFontAttributeName:UIFont.systemFont(ofSize: )], for: .selected)
nav.tabBarItem.image = UIImage(named:picAry[M])
nav.tabBarItem.selectedImage = UIImage(named:picSelectedAry[M])
VCAry[M].title = nameAry[M]
navVCAry.append(nav) }

千万别忘了!!如下:

//添加工具栏---》千万别忘了
self.viewControllers = navVCAry as? [UIViewController]

在此方法实现后,运行后发现一个问题,就是图片并未正常展示,而是现实的默认的蓝色,这个时候需要设置图片的展示属性,具体如下:

 UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:

 .automatic  // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。     
.alwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。
.alwaysTemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。

了解这3个属性,然后在上面的方法中添加如下代码:

    var image:UIImage = UIImage(named:picAry[M])!
var selectedimage:UIImage = UIImage(named:picSelectedAry[M])!
image = image.withRenderingMode(UIImageRenderingMode.alwaysOriginal);
selectedimage = selectedimage.withRenderingMode(UIImageRenderingMode.alwaysOriginal);
nav.tabBarItem.image = image
nav.tabBarItem.selectedImage = selectedimage

具体的效果就不上效果图了,感兴趣的可以自己去测试下,括弧:使用storyboard拖拽的tabbarcontroller也可以使用此方式来让tabbaritem的image正常显示。

3,顺便也可以设置导航栏的背景颜色和title的颜色,因为创建的时候就已经把导航控制器加进去了,代码如下:

    //设置导航栏的背景图片 (优先级高)
(navVCAry[M] as AnyObject).navigationBar.setBackgroundImage(UIImage(named:"NavigationBar"), for:.default)
//设置导航栏的背景颜色 (优先级低)
(navVCAry[M] as AnyObject).navigationBar.barTintColor = UIColor.orange
//设置导航栏的字体颜色
(navVCAry[M] as AnyObject).navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.red]

4,设置tabbaritem的字体颜色和字体大小(选中与未选中效果)

nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.black,NSFontAttributeName:UIFont.systemFont(ofSize: )], for: .normal)
nav.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.cyan,NSFontAttributeName:UIFont.systemFont(ofSize: )], for: .selected)

效果如下:

这样一来,当行栏的背景颜色和title的字体颜色,还有tabbar的image的正常展示和相应选中和未选中情况下tabbaritem的title的字体颜色,就都设置好了!

4,此外还可以设置底部工具栏的背景颜色,代码如下:

self.tabBar.barTintColor = UIColor.brown

最终效果如下:

5,push的时候隐藏tabbar

//隐藏tabbar
override func viewWillAppear(_ animated: Bool) {
navigationController?.tabBarController?.tabBar.isHidden = true;
}
override func viewWillDisappear(_ animated: Bool) {
navigationController?.tabBarController?.tabBar.isHidden = false;
}

这样,在每个push到的页面添加这2个方法,就可以实现隐藏tabbar,当然故事版时候,会有相应的设置!

基本的构建就完成了,只是最基本的,如果大家有好的自定义方案也可以共享下!

swift - 之TabBarController的用法的更多相关文章

  1. Swift枚举的全用法

    鉴于昨天开会部门会议讨论的时候,发现有些朋友对枚举的用法还是存在一些疑问,所以就写下这个文章,介绍下Swift下的枚举的用法. 基本的枚举类型 来,二话不说,我们先贴一个最基本的枚举: enum Mo ...

  2. SWIFT UITableView的基本用法

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

  3. 【iOS】swift 排序Sort函数用法(包含NSDictionary排序)

    用了几分钟做的简单翻译 一个例子 直接贴代码,不过多解释 //这是我们的model class imageFile { var fileName = String() var fileID = Int ...

  4. swift中_的用法,忽略默认参数名。

    swift中默认参数名除了第一个之外,其他的默认是不忽略的,但是如果在参数的名字前面加上_,就可以忽略这个参数名了,虽然有些麻烦,但是这种定义也挺好,而且不想知道名字或者不想让别人知道名字的或者不用让 ...

  5. Swift String 一些经常用法

    直接上代码 //字符串 //1 推断字符串是否为空 var test1Str="" var test1Str2:String = String(); println("t ...

  6. Swift 字典 Dictionary基本用法

    import UIKit /* 字典的介绍 1.字典允许按照某个键访问元素 2.字典是由两部分组成, 一个键(key)集合, 一个是值(value)集合 3.键集合是不能有重复的元素, 值集合可以有重 ...

  7. Swift 字典的经常用法

    /* * *要正确使用字典,也须要一些条件 * 1.字典键值对的键和值的类型必须明白,能够直接指定.也能够类似数组直接赋值由编译器自己主动识别 * 2,字典必需要初始化 * 3,键的类型必须是能够被哈 ...

  8. Swift—UITextField的基本用法

    https://www.jianshu.com/p/63bdeca39ddf 1.文本输入框的创建##### let textField = UITextField(frame: CGRect(x:1 ...

  9. SWIFT Button的基本用法

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

随机推荐

  1. xslt转换xml

    实现json--> xml --(xlst)--> xml pom依赖 <dependency> <groupId>net.sf.json-lib</grou ...

  2. Linux中查看CPU信息【转】

    [转自]:http://blog.chinaunix.net/uid-23622436-id-3311579.html cat /proc/cpuinfo中的信息 processor       逻辑 ...

  3. LeetCode: Multiply Strings 解题报告

    Multiply StringsGiven two numbers represented as strings, return multiplication of the numbers as a ...

  4. 【火狐FireFox】同步失败后,书签被覆盖,如何恢复书签

    问题场景: 使用公司的电脑,下载安装火狐,登录个人帐号后,火狐会自动开始同步书签.但有时候会同步失败,比如登录之前选的是[本地服务],而最新的书签都是在[全球服务]理,那么很有可能同步到的是N久之前的 ...

  5. VMWare虚拟机安装创建虚拟机的使用教程

    VMWare虚拟机安装创建虚拟机的使用教程   在配置虚拟机之前需要安装它,VMWare软件的安装过程比较简单,在安装在之前应该先看下说明文档.下面以VMWare Workstation6.5虚拟机 ...

  6. 360浏览器兼容模式 不能$.post (不是a 连接 onclick的问题!!)

    最近发现一个360浏览器很蛋疼的事情,在兼容模式下 代码: <a href="#" onclick='doAudit(1)'>审核</a> 点击没有任何效果 ...

  7. iOS边练边学--UITableView性能优化之三种方式循环利用

    一.cell的循环利用方式1: /** * 什么时候调用:每当有一个cell进入视野范围内就会调用 */ - (UITableViewCell *)tableView:(UITableView *)t ...

  8. C# 字典 Dictionary 遍历

    using System; using System.Collections.Generic; public class Example { public static void Main() { / ...

  9. DataGridView使用技巧三:不显示最下面的新行、判断新增行

    一.DataGridView不显示下面的新行 通常DataGridView的最下面一行是用户新追加的行(行头显示*).如果不想让用户新追加行即不想显示该新行,可以将DataGridView对象的All ...

  10. js学习笔记16----父节点的操作

    1.元素.parentNode : 只读属性,获取当前元素的父节点. 2.元素.offsetParent : 只读属性,获取离当前元素最近的一个有定位属性(position为relative或者abs ...