Badge is for showing the count, for example for showing the number of unread notifications.
Build and Run we will see output as follow:
Download sample project with example :
Step 1:
Firstly create new swift file and add a subclass to UIButton as follow:import UIKit class SSBadgeButton: UIButton { var badgeLabel = UILabel() var badge: String? { didSet { addBadgeToButon(badge: badge) } } public var badgeBackgroundColor = UIColor.red { didSet { badgeLabel.backgroundColor = badgeBackgroundColor } } public var badgeTextColor = UIColor.white { didSet { badgeLabel.textColor = badgeTextColor } } public var badgeFont = UIFont.systemFont(ofSize: 12.0) { didSet { badgeLabel.font = badgeFont } } public var badgeEdgeInsets: UIEdgeInsets? { didSet { addBadgeToButon(badge: badge) } } override init(frame: CGRect) { super.init(frame: frame) addBadgeToButon(badge: nil) } func addBadgeToButon(badge: String?) { badgeLabel.text = badge badgeLabel.textColor = badgeTextColor badgeLabel.backgroundColor = badgeBackgroundColor badgeLabel.font = badgeFont badgeLabel.sizeToFit() badgeLabel.textAlignment = .center let badgeSize = badgeLabel.frame.size let height = max(18, Double(badgeSize.height) + 5.0) let width = max(height, Double(badgeSize.width) + 10.0) var vertical: Double?, horizontal: Double? if let badgeInset = self.badgeEdgeInsets { vertical = Double(badgeInset.top) - Double(badgeInset.bottom) horizontal = Double(badgeInset.left) - Double(badgeInset.right) let x = (Double(bounds.size.width) - 10 + horizontal!) let y = -(Double(badgeSize.height) / 2) - 10 + vertical! badgeLabel.frame = CGRect(x: x, y: y, width: width, height: height) } else { let x = self.frame.width - CGFloat((width / 2.0)) let y = CGFloat(-(height / 2.0)) badgeLabel.frame = CGRect(x: x, y: y, width: CGFloat(width), height: CGFloat(height)) } badgeLabel.layer.cornerRadius = badgeLabel.frame.height/2 badgeLabel.layer.masksToBounds = true addSubview(badgeLabel) badgeLabel.isHidden = badge != nil ? false : true } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.addBadgeToButon(badge: nil) fatalError("init(coder:) has not been implemented") } }
Step 2:
Finally open ViewController.swift file then add a button as follow:To UIButton:
let notificationButton = SSBadgeButton() notificationButton.frame = CGRect(x: view.frame.width/2 - 22, y: view.frame.height/2 - 22, width: 44, height: 44) notificationButton.setImage(UIImage(named: "Notification")?.withRenderingMode(.alwaysTemplate), for: .normal) notificationButton.badgeEdgeInsets = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 15) notificationButton.badge = "4" view.addSubview(notificationButton)
To UIBarButton:
let notificationButton = SSBadgeButton() notificationButton.frame = CGRect(x: 0, y: 0, width: 44, height: 44) notificationButton.setImage(UIImage(named: "Notification")?.withRenderingMode(.alwaysTemplate), for: .normal) notificationButton.badgeEdgeInsets = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 15) notificationButton.badge = "4" self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: notificationButton)
Build and Run we will see output as follow:
Download sample project with example :
i added this to my app, thanks but
ReplyDeleteit took my ability to segue with that button. :( how can i segue via button with badge