PagingMenuController icon indicating copy to clipboard operation
PagingMenuController copied to clipboard

Add badge to the segmented control item

Open tunidev opened this issue 8 years ago • 4 comments

how to add a badge next to menu items

badge

tunidev avatar Aug 18 '16 21:08 tunidev

Badge option is not supported yet. You can use custom view instead. https://github.com/kitasuke/PagingMenuController/blob/master/Pod/Classes/Protocols/MenuItemViewCustomizable.swift#L30

kitasuke avatar Aug 27 '16 07:08 kitasuke

Is there any example of using a custom view? I'd like to add a badge also.

spsammy avatar Jan 13 '17 07:01 spsammy

Something like this.

struct MenuItemRepository: MenuItemViewCustomizable {
    var displayMode: MenuItemDisplayMode {
        return .custom(view: yourBadgeView)
    }
}

kitasuke avatar Jan 15 '17 07:01 kitasuke

@spsammy

I use pod "MIBadgeButton_Swift" to display badge button on menu item. Here is my implementation :

struct MenuItemCheckout: MenuItemViewCustomizable {
    var displayMode: MenuItemDisplayMode {
        let buttonView = MenuBadgeView(frame: CGRect(x: 0, y: 0, width: 125, height: 50))
        return .custom(view: buttonView)
    }
}
class MenuBadgeView: UIView {
    let cartBadgeButton: MIBadgeButton = {
        var image = UIImage(named: "checkout")?.withRenderingMode(.alwaysTemplate)
        let button = MIBadgeButton()
        button.setImage(image, for: .normal)
        button.isUserInteractionEnabled = false
        button.tintColor = UIColor.deselectedMenuItem //intital button tint grey
        return button
    }()
    
    override init(frame: CGRect){
        super.init(frame: frame)
        setupViews()
        
        NotificationCenter.default.addObserver(forName: .arrayValueChanged, object: nil, queue: OperationQueue.main) { [weak self] (notif) in
            self?.cartBadgeButton.badgeString = ProductCart.sharedInstance.badge
        }
    }
    
    deinit {
        NotificationCenter.default.removeObserver(self)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setupViews() {
        
        addSubview(cartBadgeButton)
        
        addConstraintsWithFormat("H:[v0(28)]", views: cartBadgeButton)
        addConstraintsWithFormat("V:[v0(28)]", views: cartBadgeButton)
        
        addConstraint(NSLayoutConstraint(item: cartBadgeButton, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier:1, constant: 0)) //center menu icons
        addConstraint(NSLayoutConstraint(item: cartBadgeButton, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier:1, constant: 0))
        cartBadgeButton.badgeString = ProductCart.sharedInstance.badge
        
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        cartBadgeButton.badgeEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 0, right: 0)
    }
}

morteg avatar Mar 30 '17 09:03 morteg