Comment ajouter des Badges sur UIBarbutton article?

Salut les amis je suis nouveau sur iphone en développement. Am lutte avec ajouter des valeurs de badge sur UIBarbutton élément sur le côté droit. J'ai essayé mais je ne peux pas résoudre ce problème. Quelqu'un peut m'aider.

Merci d'avance!

33
demandé sur Andrey Chevozerov 2011-04-16 09:14:52

9 réponses

je sais que ce post est assez vieux, mais avec iOS7, l'apparence de MKNumberBadgeView ne correspond pas vraiment à la conception de badge d'élément de la barre d'onglets. J'ai trouvé cet autre composant qui hérite UIBarButtonItem et faire le travail très bien :

https://github.com/TanguyAladenise/BBBadgeBarButtonItem

espérant que cela puisse aider d'autres iOS7 développeurs comme moi

30
répondu phyzalis 2014-03-12 05:38:27

finalement j'ai trouvé le moyen d'ajouter des badges sur l'article UIBarbutton. J'ai beaucoup cherché mais pas trouvé la bonne réponse. J'ai donc créé UIButton et je l'ai ajouté en tant que vue personnalisée sur l'item rightbarbutton. Ajouter ajouter le MKNumberBadgeView pour afficher le numéro de badge. Ci-dessous j'ai ajouter mon code pour vous.

// Initialize NKNumberBadgeView...
MKNumberBadgeView *number = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(60, 00, 30,20)];
number.value = 10;

// Allocate UIButton
UIButton *btn = [UIButton  buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(0, 0, 70, 30);
    btn.layer.cornerRadius = 8;
    [btn setTitle:@"Button" forState:UIControlStateNormal];
    [btn addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
    //[btn setBackgroundColor:[UIColor blueColor]];
    [btn setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.1 alpha:0.2]];
    btn.font = [UIFont systemFontOfSize:13];
    //[btn setFont:[UIFont systemFontOfSize:13]];
    [btn addSubview:number]; //Add NKNumberBadgeView as a subview on UIButton

// Initialize UIBarbuttonitem...
UIBarButtonItem *proe = [[UIBarButtonItem alloc] initWithCustomView:btn];
self.navigationItem.leftBarButtonItem = proe;

Merci.

29
répondu Yuvaraj.M 2015-11-04 13:02:11

phyzalis a une bonne réponse, il y a une version catégorisée de sa solution ici:

UIBarButtonItem+Badge

Voici comment vous pouvez l'utiliser:

// Build your regular UIBarButtonItem with Custom View
UIImage *image = [UIImage imageNamed:@"someImage"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0,0,image.size.width, image.size.height);
[button addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchDown];
[button setBackgroundImage:image forState:UIControlStateNormal];

// Make BarButton Item
UIBarButtonItem *navLeftButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = navLeftButton;

// this is the key entry to change the badgeValue
self.navigationItem.leftBarButtonItem.badgeValue = @"1";
19
répondu Mike 2014-05-07 14:53:02

j'ai fait quelque chose de semblable à MaxMa, mais je suis juste allé de l'avant et a ajouté le badge directement au moi.navigationController.navigationBar.

enter image description here

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

[self.navigationController.navigationBar addSubview:numberBadge];

assurez-vous simplement de le supprimer de subview pendant viewWillDisappear et de l'ajouter à nouveau pendant viewDidAppear. Ça semble encore un peu hacky, mais je suis plus à l'aise avec ce hack que de changer l'ordre Z de la barre de navigation.

pour l'enlever pendant viewWillDisappear

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [numberBadge removeFromSuperview]; 
}
12
répondu Tod Cunningham 2014-01-07 15:38:26

C'est simple et la meilleure façon !

enter image description here

MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(230, -51, 40, 40)];
numberBadge.value = 5;

self.navigationController.navigationBar.layer.zPosition = -1;
[self.view addSubview:numberBadge];
7
répondu MaxMa 2012-11-19 07:34:34

utilisez le code ci-dessous simple pour ajouter le badge sur UIBarButtonItem;

// Variable Declartion

var badgeCount = Int()

// Instance Method

    func setUpBadgeCountAndBarButton() {
        // badge label
        let label = UILabel(frame: CGRect(x: 10, y: -05, width: 25, height: 25))
        label.layer.borderColor = UIColor.clear.cgColor
        label.layer.borderWidth = 2
        label.layer.cornerRadius = label.bounds.size.height / 2
        label.textAlignment = .center
        label.layer.masksToBounds = true
        label.textColor = .white
        label.font = label.font.withSize(12)
        label.backgroundColor = .red
        label.text = "\(self.badgeCount)"

        // button
        let rightButton = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
        rightButton.setBackgroundImage(UIImage(named: "notification_dash"), for: .normal)
        rightButton.addTarget(self, action: #selector(notificationBarButtonClick), for: .touchUpInside)
        rightButton.addSubview(label)

        // Bar button item
        let rightBarButtomItem = UIBarButtonItem(customView: rightButton)
        navigationItem.rightBarButtonItem = rightBarButtomItem
    }

// Call To Method

self.badgeCount = 11
self.setUpBadgeCountAndBarButton()

//Note: une Augmentation de votre insigne selon que vous avez reçu de notification.Vous devez écrire votre code selon votre logique choisie, c'est-à-dire comment maintenir ce numéro de badge dans la base de données.

Profiter..!

1
répondu Kiran jadhav 2017-12-06 07:05:52

je sais que cela a été résolu,mais j'ai pensé que je pourrais ajouter à ce que j'ai découvert à cette réponse par souci d'exhaustivité.

Vous pouvez aussi ajouter MKNumberBadgeView directement à la vue de l' UIBarButtonItem. En utilisant Monotouch( C#), voici comment vous obtenez la vue pour le 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> 

je suis sûr qu'il est facile de convertir ceci en Obj-C. Vous aurez également besoin de jouer avec le cadre pour le badge pour le faire apparaître au bon endroit.

de Cette façon vous n'aurez pas à supprimer/ajouter la vue de la barre de navigation.

0
répondu ceiling cat 2013-08-12 18:36:41

après avoir cherché trop de solutions j'ai trouvé cette meilleure solution pour L'objectif-C

Goto suivant le lien et télécharger deux fichiers "UIBarButtonItem+Badge.h" et "UIBarButtonItem+Badge.m" et ajouter à votre projet :

https://github.com/mikeMTOL/UIBarButtonItem-Badge

puis importer dans votre classe:

#import "UIBarButtonItem+Badge.h"

Et écrivez la ligne suivante pour ajouter badge :

self.navigationItem.rightBarButtonItem.badgeValue = @"1"; //your value 

j'Espère qu'il va Travailler !!!

0
répondu Mandar Choudhary 2018-01-13 07:06:54

Extension pour ajouter UIActivityIndicatorView sans remplacer 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({  is UIActivityIndicatorView }).first
    loading?.removeFromSuperview()
    let buttonView = view.subviews.first
    buttonView?.alpha = 1.0
}

}

0
répondu Allan Alves 2018-08-02 21:17:28