Swift UITabBarController 标签栏控制器

来源:互联网 发布:淘宝女装尺码表模板 编辑:程序博客网 时间:2024/06/06 01:29

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


1 0
原创粉丝点击