Make Extension of UITabBarController

extension UITabBarController {
    
    func setBadges(badgeValues: [Int]) {
        
        for view in self.tabBar.subviews {
            if view is CustomTabBadge {
                view.removeFromSuperview()
            }
        }
        
        for index in 0...badgeValues.count-1 {
            if badgeValues[index] != 0 {
                addBadge(index, value: badgeValues[index])
            }
        }
    }
    
    func addBadge(index: Int, value: Int) {
        let badgeView = CustomTabBadge()
        
        badgeView.clipsToBounds = true
        badgeView.textColor = TheamColor
        badgeView.textAlignment = .Center
        badgeView.font = UIFont(name: fArticulatCFDemiBold, size: 11)!
        badgeView.text = String(value)
        badgeView.backgroundColor = UIColor.whiteColor()
        badgeView.tag = index
        badgeView.borderColor = TheamColor
        badgeView.borderWidth = 1
        tabBar.addSubview(badgeView)
        
        self.positionBadges()
    }
    
    override public func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        self.positionBadges()
    }
    
    // Positioning
    func positionBadges() {
        
        var tabbarButtons = self.tabBar.subviews.filter { (view: UIView) -> Bool in
            return view.userInteractionEnabled // only UITabBarButton are userInteractionEnabled
        }
        
        tabbarButtons = tabbarButtons.sort({ $0.frame.origin.x < $1.frame.origin.x })
        
        for view in self.tabBar.subviews {
            if view is CustomTabBadge {
                let badgeView = view as! CustomTabBadge
                self.positionBadge(badgeView, items:tabbarButtons, index: badgeView.tag)
            }
        }
    }
    
    func positionBadge(badgeView: UIView, items: [UIView], index: Int) {
        
        let itemView = items[index]
        let center = itemView.center
        
        let xOffset: CGFloat = 10
        let yOffset: CGFloat = -5
        badgeView.frame.size = CGSizeMake(17, 17)
        badgeView.center = CGPointMake(center.x + xOffset, center.y + yOffset)
        badgeView.layer.cornerRadius = badgeView.bounds.width/2
        tabBar.bringSubviewToFront(badgeView)
    }
}

Use Simple Method like:

self.tabBarController.setBadges([0,0,0,0,Int(count)!])

or self.tabBarController.addBadge(4, value: 1)

You may also like

Leave a Reply