UITabBarController是一个导航控制器,它管理着多个控制器的相互跳转!
1.创建
//初始化各页面控制器(可以是普通Controoler,也可以是UINavigationController)
let homeController = ViewController()
let homeTab = UINavigationController(rootViewController: homeController)
let imageTab = ImagesTabController()
let msgTab = MsgTabController()
let setTab = SetTabController()
//将视图控制器加入到TabBar控制器中
let tabController = UITabBarController()
tabController.viewControllers = [homeTab,imageTab,msgTab,setTab]
//将TabBar作为根视图控制器
self.window?.rootViewController = tabController
2.创建TabBar的Item
//设置Tabbar标题
let itemHome = UITabBarItem(title: "首页", image: UIImage(named:"home")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named:"home")?.withRenderingMode(.alwaysOriginal))
homeTab.tabBarItem = itemHome
let itemImage = UITabBarItem(title: "图库", image: UIImage(named:"images")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named:"images")?.withRenderingMode(.alwaysOriginal))
imageTab.tabBarItem = itemImage
let itemMsg = UITabBarItem(title: "消息", image: UIImage(named:"message")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named:"message")?.withRenderingMode(.alwaysOriginal))
itemMsg.badgeValue = "5" //设置消息数
msgTab.tabBarItem = itemMsg
let itemSet = UITabBarItem(title: "我的", image: UIImage(named:"setting")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named:"setting")?.withRenderingMode(.alwaysOriginal))
setTab.tabBarItem = itemSet
注:如果图片不使用withRenderingMode方法,图片将被渲染成一个统一颜色的色块,使用withRenderingMode(.alwaysOriginal)可以显示原图样式
3.设置TabBar样式
//背景色
tabController.tabBar.barTintColor = UIColor.white
//设置TabBar未选中文字颜色
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.blue], for: .normal)
//设置TabBar选中文字颜色
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.red], for: .selected)
4.设置默认选中TabBarItem
tabController.selectedIndex = 0
5.代理方法
self.delegate = (self as UITabBarControllerDelegate)
//切换时被调用
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
NSLog("发生切换")
}
//是否可以选择控制器(true:可以选择;false:不可以选择)
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
//先获取当前UITabBarController的子对象
let childsVc = tabBarController.viewControllers! as NSArray
let selecdIndex : Int = childsVc.index(of: viewController)
if selecdIndex == 1 {
return false
}
return true
}
//TabBar的Items个数大于5个的时候,第5个变成MORE,当开始编辑tabbar并调整tabbar的位置时,调用该函数
func tabBarController(_ tabBarController: UITabBarController, willBeginCustomizing viewControllers: [UIViewController]) {
NSLog("开始编辑")
}
//TabBar在MORE的时候,在编辑将要完成的时候调用该函数
func tabBarController(_ tabBarController: UITabBarController, willEndCustomizing viewControllers: [UIViewController], changed: Bool) {
NSLog("即将完成")
}
//TabBar结束编辑的时候调用该函数
func tabBarController(_ tabBarController: UITabBarController, didEndCustomizing viewControllers: [UIViewController], changed: Bool) {
NSLog("编辑完成")
}
6.tabbar常用设置
//隐藏当前页面tabbar
self.tabBarController?.tabBar.isHidden=true
效果如下: