需要实现的样子如下图:
UITabBar.png文件目录:
目录.png主要思路:
--- 创建一个屏幕上面可以显示UI
--- 底部控制器名字叫TabBar 应该就是搞这个了
--- 每一个Item要对应一个控制器,这些控制器再去控制各个Item的内容
1.先在AppDelegate.swift里 创建一个UIWindow,并且设置Frame,指定根控制器,最后默念咒语生效。
// didFinishLaunchingWithOptions方法启动成功后执行
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// 1. 创建 UIWindow
self.window = UIWindow.init()
// 2. 设置 UIWindow 的Frame
self.window = UIWindow(frame: UIScreen.main.bounds)
// 3. 设置根试图控制器为 RootViewController()新建类文件
self.window?.rootViewController = RootTabBarController()
// 4. 生效
self.window?.makeKeyAndVisible()
return true
}
2. 创建 Extension 公共类 用于抽取一些通用的方法。
-2.1 便利构造函数扩展系统类 UIColor 简化 / 255.0这种写法 , 并且alpha默认值设置为1.0
import UIKit
// 扩展系统UIColor的类 便利构造函数简化写法
extension UIColor {
convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1.0) {
self.init (red: r/255.0, green: g / 255.0, blue: b / 255.0, alpha: a)
}
}
-2.2 扩展 RootTabBarController 类 用于创建一个 设置Item的公共方法,这样到后面就可以直接传值进这个公共方法生成Item了。
import UIKit
// 扩展 RootTabBarController 类 用于创建Item
extension RootTabBarController {
// 创建Items的方法
func navigationBarItems(TabBarItemVC: UIViewController ,title: String,iconImage: String?, selectedImage: UIImage?, badgeValue :String? ) -> UINavigationController {
// 设置 rootViewController对应的Ctr
let Ctr = UINavigationController(rootViewController: TabBarItemVC)
// 设置 title底部标题 | image图片 | selectedImage选中后的图片
Ctr.tabBarItem = UITabBarItem(title: title, image: UIImage(named: iconImage!), selectedImage: selectedImage)
// 设置提示信息
Ctr.tabBarItem.badgeValue = badgeValue
return Ctr
}
}
3.创建一个RootTabBarController.swift 继承 UITabBarController,在override func viewDidLoad() {} 这个里面实现 TabBar的样式和TabBarItems相关设置。可以通过扩展类的方式,在override func viewDidLoad()里只要载入方法名即可,这样会看起来B格高点。
-3.1 扩展 RootTabBarController类 设定TabBar的样式
-3.2 扩展 RootTabBarController类 设定TabBar的Item
PS:每一个Item对应一个Controller,这个要事先创建好。
import UIKit
class RootTabBarController: UITabBarController {
// 系统回调函数
override func viewDidLoad() {
super.viewDidLoad()
// 1. 载入TabBar的样式
SetupTabBarStyle()
// 2. 载入TabBarItems
SetupTabBarItems()
}
}
// 扩展 RootTabBarController 方法
extension RootTabBarController {
// 1. 设定TabBar的样式
// PS: 这里 UIColor(r: , g: , b: , a:) 是我们扩展系统UIColor的便利构造函数提供的方法 (看上面2.1)
func SetupTabBarStyle() {
// 1.1 设置整个RootTabBarController的Item颜色
self.tabBar.tintColor = UIColor(r: 215, g: 50, b: 64)
// 1.2 设置整个RootTabBarController的背景色
self.tabBar.barTintColor = UIColor(r: 0, g: 0, b: 0, a: 0.4)
}
// 2. 设定TabBar的Item
func SetupTabBarItems() {
// 创建 首页Item 控制器名 HomeViewController()
let HomeNav = navigationBarItems(TabBarItemVC: HomeViewController(), title: "首 页", iconImage: "tabBar_Item1", selectedImage: nil, badgeValue: "5")
// 创建 大师Item 控制器 MasterViewController()
let MasterNav = navigationBarItems (TabBarItemVC: MasterViewController(), title: "大师", iconImage: "tabBar_Item2", selectedImage: nil, badgeValue: nil)
// 创建 购物Item 控制器 ShoppingViewController()
let ShoppingNav = navigationBarItems(TabBarItemVC: ShoppingViewController(), title: "尖货", iconImage: "tabBar_Item3", selectedImage: nil, badgeValue: nil)
// 创建 我的Item 控制器 PersonalViewController()
let PersonalNav = navigationBarItems(TabBarItemVC: PersonalViewController(), title: "我的", iconImage: "tabBar_Item4", selectedImage: nil, badgeValue: nil)
// 设置tabBar根试图
let RootTabBarCtr = [HomeNav,MasterNav,ShoppingNav,PersonalNav]
//加入进 viewControllers
self.viewControllers = RootTabBarCtr
}
}
网友评论