How to add Badges on UIBarbutton item?

前端 未结 10 1673
广开言路
广开言路 2020-11-28 21:29

Hi friends am new to iphone developing. Am struggle with add badge values on UIBarbutton item on right side. I have tried but i can\'t solve this problem. Can anyone help me

相关标签:
10条回答
  • 2020-11-28 21:47

    I know this post is pretty old but with iOS7, MKNumberBadgeView's appearance does not really match the tab bar item badge design. I have found this other component which herits UIBarButtonItem and do the job very well :

    https://github.com/TanguyAladenise/BBBadgeBarButtonItem

    Hope this may help other iOS7 developers like me

    0 讨论(0)
  • 2020-11-28 21:53

    I did something similar to MaxMa, but I just went ahead and added the badge directly to the self.navigationController.navigationBar.

    enter image description here

    MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(35, 0, 40, 40)];
    numberBadge.value = 1;
    
    [self.navigationController.navigationBar addSubview:numberBadge];
    

    Just make sure to remove it from the subview during viewWillDisappear and add it back during viewDidAppear. It still seems a little hacky, but I'm more comfortable with this hack then changing the nav bar z-order.

    To remove it during viewWillDisappear

    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        [numberBadge removeFromSuperview]; 
    }
    
    0 讨论(0)
  • 2020-11-28 21:55

    I know this has been solved already,but I thought I might add what I have discovered to this answer for the sake of completeness.

    You can also just add MKNumberBadgeView directly to the view for the UIBarButtonItem. Using Monotouch (C#), this is how you get the view for the UIBarButtonItem

            //barbutton is some UIBarButtonItem. Make sure to check for view. In
            //ViewDidLoad(), the view for the barbutton might not exist yet.
            Selector sel = new Selector("view");
            var handle = Messaging.intptr_objc_msgSend(barbutton.Handle, sel.Handle);
            var view = Runtime.GetNSObject(handle) as UIView;
            var mkBadge = ...    //the badge
            view.Add(badge);
            view.Layer.ZPosition = <some large number> 
    

    I'm sure it's easy to convert this to Obj-C. You will also need to play around with the Frame for the badge to get it to show up in the right place.

    This way you wont have to remove/add the view from the navigationbar.

    0 讨论(0)
  • 2020-11-28 21:55

    Extension to add an UIActivityIndicatorView without replacing the UIBarButtonItem.

    extension UIBarButtonItem {

    func startLoading() {
        guard let view = self.value(forKey: "view") as? UIView else { return }
        let loading = UIActivityIndicatorView(activityIndicatorStyle: .gray)
        loading.frame = view.bounds
        loading.startAnimating()
        view.addSubview(loading)
        view.bringSubview(toFront: loading)
        let buttonView = view.subviews.first
        buttonView?.alpha = 0.1
    }
    
    func stopLoading() {
        guard let view = self.value(forKey: "view") as? UIView else { return }
        let loading = view.subviews.filter({ $0 is UIActivityIndicatorView }).first
        loading?.removeFromSuperview()
        let buttonView = view.subviews.first
        buttonView?.alpha = 1.0
    }
    

    }

    0 讨论(0)
提交回复
热议问题