效果图:
首先创建三个TabVIewController:
------------FirstTabViewController------------------
override func viewDidLoad() { super.viewDidLoad() self.title = "TabBarItem #1" self.view.backgroundColor = UIColor.purpleColor() }------------SecondTabViewController--------------
override func viewDidLoad() { super.viewDidLoad() self.title = "TabBarItem#2" self.view.backgroundColor = UIColor.yellowColor() }
override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.blueColor() }
<pre name="code" class="html">// // TabBarViewController.swift // import UIKit class TabBarViewController: UITabBarController { var screenWidth: CGFloat? var screenHeight: CGFloat? let tabBarWidth: CGFloat = 64 let tabBarHeight: CGFloat = 49 let tabBarViewHeight: CGFloat = 60 var tabButtons = [UIButton]() var imgArr = ["TabBar1", "TabBar2" ,"TabBar3"]; var imgSelArr = ["TabBar1Sel", "TabBar2Sel", "TabBar3Sel"] override func viewDidLoad() { super.viewDidLoad() var screenFrame = UIScreen.mainScreen().bounds screenWidth = screenFrame.width screenHeight = screenFrame.height println(screenWidth) self.view.backgroundColor = UIColor.whiteColor() self.tabBar.hidden = true initControllers() customTabBar() } func customTabBar() -> Void { let tabBarOffsetX = screenWidth!/3 let tabBarX = tabBarOffsetX/2 - tabBarWidth/2 let tabBarY = tabBarViewHeight/2 - tabBarHeight/2 var tabBarView = UIView(frame: CGRectMake(0, screenHeight! - tabBarViewHeight, screenWidth!, tabBarViewHeight)) tabBarView.backgroundColor = UIColor.blackColor() self.view.addSubview(tabBarView) for index in 0..<imgArr.count { var tabBar_X = (CGFloat)(index) * tabBarOffsetX var btn = UIButton(frame: CGRectMake((CGFloat)(tabBarX + tabBar_X), (CGFloat)(tabBarY), tabBarWidth, tabBarHeight)) if(index == 0) { btn.setBackgroundImage(UIImage(named: imgSelArr[index]), forState: UIControlState.Normal) }else{ btn.setBackgroundImage(UIImage(named: imgArr[index]), forState: UIControlState.Normal) } btn.tag = index + 100 btn.addTarget(self, action: "tabAction:", forControlEvents: UIControlEvents.TouchUpInside) tabBarView.addSubview(btn) tabButtons.append(btn) } } func tabAction(obj: UIButton) -> Void { var indexSel = obj.tag - 100 self.selectedIndex = indexSel for index in 0..<tabButtons.count { if(index == indexSel) { tabButtons[indexSel].setBackgroundImage(UIImage(named: imgSelArr[indexSel]), forState: UIControlState.Normal) }else{ tabButtons[index].setBackgroundImage(UIImage(named: imgArr[index]), forState: UIControlState.Normal) } } } func initControllers() -> Void { let firstTabView = FirstTabViewController() let secondTabView = SecondTabViewController() let thirdTabView = ThirdTabViewController() var viewArr = [firstTabView, secondTabView, thirdTabView] var viewCtlArr = [AnyObject]() for index in 0..<viewArr.count { if(index != 2) { var navController = UINavigationController(rootViewController: viewArr[index]) viewCtlArr.append(navController) }else{ viewCtlArr.append(viewArr[index]) } } self.viewControllers = viewCtlArr } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
最后,在AppDelegate.swift中设置根视图:
var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { var tabBarController = TabBarViewController() self.window!.rootViewController = tabBarController return true }