UITabBarController 是一个常用的框架级控件
他的功能和UINavigationController比较类似
如下图:
我们可以看到底下工具栏有四个按钮分别可以展示四个ViewController
下来我们用Swift语言来实现一下这个控件
首先,我们创建四个ViewController 准备测试
创建完成之后在AppDelegate的启动方法中创建UITabBarController
func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. //创建ViewController let homeVC=HomeViewController() let enjoyVC=EnjoyViewController() let exploreVC=ExploreViewController() let userinfoVC=UserInfoViewController() //设置ViewController在工具栏的图标 homeVC.tabBarItem.image=UIImage(named: "icon_tab01_normal.png") enjoyVC.tabBarItem.image=UIImage(named: "icon_tab02_normal.png") exploreVC.tabBarItem.image=UIImage(named: "icon_tab03_normal.png") userinfoVC.tabBarItem.image=UIImage(named: "icon_tab04_normal.png") //设置ViewController在工具栏的名称 homeVC.tabBarItem.title="首页" enjoyVC.tabBarItem.title="关注" exploreVC.tabBarItem.title="探索" userinfoVC.tabBarItem.title="我的" //将以上的ViewController天剑到UITabBarController中 let tabBar=UITabBarController() tabBar.viewControllers=[homeVC,enjoyVC,exploreVC,userinfoVC] //将window的跟视图设置为tabBar self.window?.rootViewController=tabBar self.window?.backgroundColor=UIColor.whiteColor() return true }运行我们已经看到效果了
点击工具栏四个按钮已经可以切换ViewController了
如果我们刚才创建的ViewController没有做区分 可能看不出来效果
可以给四个ViewController分别设置一下背景色看看
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.view.backgroundColor=UIColor.grayColor() }
设置选中之后工具栏的图标
刚才我们尝试了设置工具栏的图标和名称
设置选中状态的图标其实很简单
homeVC.tabBarItem.selectedImage直接给selectedImage 赋值即可
工具栏图标超过5个之后
我们刚才给工具栏创建了四个标签,也就是当前的UITabBarController容纳了四个UIViewController下来我们继续添加
func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. let homeVC=HomeViewController() let enjoyVC=EnjoyViewController() let exploreVC=ExploreViewController() let userinfoVC=UserInfoViewController() let homeVC1=HomeViewController() let enjoyVC1=EnjoyViewController() let exploreVC1=ExploreViewController() let userinfoVC1=UserInfoViewController() homeVC.tabBarItem.image=UIImage(named: "icon_tab01_normal.png") enjoyVC.tabBarItem.image=UIImage(named: "icon_tab02_normal.png") exploreVC.tabBarItem.image=UIImage(named: "icon_tab03_normal.png") userinfoVC.tabBarItem.image=UIImage(named: "icon_tab04_normal.png") homeVC1.tabBarItem.image=UIImage(named: "icon_tab01_normal.png") enjoyVC1.tabBarItem.image=UIImage(named: "icon_tab02_normal.png") exploreVC1.tabBarItem.image=UIImage(named: "icon_tab03_normal.png") userinfoVC1.tabBarItem.image=UIImage(named: "icon_tab04_normal.png") homeVC.tabBarItem.title="首页" enjoyVC.tabBarItem.title="关注" exploreVC.tabBarItem.title="探索" userinfoVC.tabBarItem.title="我的" homeVC1.tabBarItem.title="首页1" enjoyVC1.tabBarItem.title="关注1" exploreVC1.tabBarItem.title="探索1" userinfoVC1.tabBarItem.title="我的1" let tabBar=UITabBarController() tabBar.viewControllers=[homeVC,userinfoVC,homeVC1,enjoyVC1,exploreVC1,userinfoVC1] tabBar.delegate=self self.window?.rootViewController=tabBar self.window?.backgroundColor=UIColor.whiteColor() return true }
我们在刚才的基础上有添加了四个ViewController
运行,我们看到最后一个按钮变成了More ...
点击More可以打开剩余几个被隐藏的图标
同时我们发现点开More之后 右上角还有一个Edit按钮,点击之后可以对几个图标的顺序自由调整
但是,当我们调整完顺序之后,在重启应用,发现顺序又还原了,并没有保存下来
如果想把调整的顺序保存起来我们得知道几个UITabBarController的代理方法
UITabBarControllerDelegate 几个简单方法
首先我们给添加TabBar的类 AppDelegate添加协议
设置代理
tabBar.delegate=self
实现一个代理方法
func tabBarController(tabBarController: UITabBarController,didEndCustomizingViewControllers viewControllers: [AnyObject],changed: Bool) { //调整完顺序之后调用 let vcs=tabBarController.viewControllers println(vcs) }
如果一切正常就可以将当前的ViewController按照顺序打印出来。
如果我们想保存可以在这个方法里面做操作(可以将顺序存储在userdefault中,下次打开首先读取userdefault中数据调整顺序)
还有一个比较重要的代理方法
optional func tabBarController(tabBarController: UITabBarController,didSelectViewController viewController: UIViewController)
选中某一个标签之后调用的
UITabBarController两个常用属性
设置标志
//设置右上角数字 homeVC.tabBarItem.badgeValue="8"
效果如下
设置默认打开的UIViewController
tabBar.selectedIndex=2
运行后直接打开的不是第一个了 而是第三个(从0开始计数)
好了,有关UITabBarController 就讲这么多,后边再有会持续更新
苹果开发群 :414319235 欢迎加入 欢迎讨论问题