美文网首页
Swift - UITabBar

Swift - UITabBar

作者: 追梦赤子心Year | 来源:发表于2024-12-26 09:41 被阅读0次
TabbarController在窗口底部显示选项卡,用于在不同模式之间进行选择,并显示该模式的视图。 TabbarController的每个标签都与一个ViewController相关联。当用户选择特定的选项卡时,TabbarController显示相应ViewController的根视图,取代之前的任何视图。(用户点击总是显示选项卡的根视图,而不管之前选择了哪个选项卡。即使选项卡已经被选中也是如此。) 官网图片

配置选项卡栏控制器的选项卡,为每个选项卡提供根视图的视图控制器分配给viewControllers属性。指定的视图控制器的顺序决定了它们在选项卡栏中出现的顺序。

    let tabBarItemsArr = [
        ["title":"工作台",
         "vcName":"FirstVC",
         "image":"mune_workbench_nor",
         "selectImage":"mune_workbench_sel"],
        ["title":"消息",
         "vcName":"SecondVC",
         "image":"mune_message_nor",
         "selectImage":"mune_message_sel"],
        ["title":"通讯录",
         "vcName":"ThirdVC",
         "image":"mune_contact_nor",
         "selectImage":"mune_contact_sel"],
        ["title":"设备",
         "vcName":"ForthVC",
         "image":"mune_device_nor",
         "selectImage":"mune_device_sel"]
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setTabBarItems()
    }
    
    func setTabBarItems() {
        for item in tabBarItemsArr {
            setTabBar(item: item)
        }
    }
    
    func setTabBar(item: [String:String]) {
        
        guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else { return }
        let vcName = nameSpace + "." + item["vcName"]!
        guard let classType = NSClassFromString(vcName) else { return }
        guard let vcType = classType as? UIViewController.Type else { return }
        let vc = vcType.init()
        vc.title = item["title"]!
        
        let navi = UINavigationController.init(rootViewController: vc)
        navi.tabBarItem = UITabBarItem.init(title: item["title"]!, image: UIImage(named: item["image"]!)!, selectedImage: UIImage(named: item["selectImage"]!)!)
                
        self.addChild(navi)
    }

指定最初选择的是哪个视图控制器用selectedIndex

self.selectedIndex = 2

UI样式:

  1. 背景色backgroundColor
tabBar.backgroundColor = .white
  1. 选中Item渲染色tintColor
tabBar.tintColor = .red
  1. 未选中的Item渲染色unselectedItemTintColor
tabBar.unselectedItemTintColor = .blue

4.设置角标及颜色

        if let items = self.tabBarController?.tabBar.items {
            items[1].badgeValue = "99+"
            items[1].badgeColor = .orange
        }

自定义UITabBarViewController

import UIKit

class TabbarVC: UITabBarController {
    
    let tabBarItemsArr = [
        ["title":"工作台",
         "vcName":"FirstVC",
         "image":"mune_workbench_nor",
         "selectImage":"mune_workbench_sel"],
        ["title":"消息",
         "vcName":"SecondVC",
         "image":"mune_message_nor",
         "selectImage":"mune_message_sel"],
        ["title":"通讯录",
         "vcName":"ThirdVC",
         "image":"mune_contact_nor",
         "selectImage":"mune_contact_sel"],
        ["title":"设备",
         "vcName":"ForthVC",
         "image":"mune_device_nor",
         "selectImage":"mune_device_sel"]
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupTabBar()
        setTabBarItems()
    }
    
    func setupTabBar() {
        tabBar.backgroundColor = .white
        
        tabBar.tintColor = .color33
        tabBar.unselectedItemTintColor = .color99
    }
    
    func setTabBarItems() {
        for item in tabBarItemsArr {
            setTabBar(item: item)
        }
        
        self.selectedIndex = 2
    }
    
    func setTabBar(item: [String:String]) {
        guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else { return }
        let vcName = nameSpace + "." + item["vcName"]!
        guard let classType = NSClassFromString(vcName) else { return }
        guard let vcType = classType as? UIViewController.Type else { return }
        let vc = vcType.init()
        vc.title = item["title"]!
        
        let navi = UINavigationController.init(rootViewController: vc)
        navi.tabBarItem = UITabBarItem.init(title: item["title"]!, image: UIImage(named: item["image"]!)!, selectedImage: UIImage(named: item["selectImage"]!)!)
                
        self.addChild(navi)
    }
}

相关文章

网友评论

      本文标题:Swift - UITabBar

      本文链接:https://www.haomeiwen.com/subject/lgtesjtx.html