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 欢迎加入 欢迎讨论问题