Swift UITabBarController 标签栏控制器

UITabBarController 是一个常用的框架级控件

他的功能和UINavigationController比较类似

如下图:

Swift UITabBarController 标签栏控制器_第1张图片

我们可以看到底下工具栏有四个按钮分别可以展示四个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 ...

Swift UITabBarController 标签栏控制器_第2张图片

点击More可以打开剩余几个被隐藏的图标

Swift UITabBarController 标签栏控制器_第3张图片

同时我们发现点开More之后 右上角还有一个Edit按钮,点击之后可以对几个图标的顺序自由调整


但是,当我们调整完顺序之后,在重启应用,发现顺序又还原了,并没有保存下来

如果想把调整的顺序保存起来我们得知道几个UITabBarController的代理方法


UITabBarControllerDelegate 几个简单方法

首先我们给添加TabBar的类 AppDelegate添加协议

Swift UITabBarController 标签栏控制器_第4张图片


设置代理

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


你可能感兴趣的:(swift)