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!
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
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.
phyzalis a une bonne réponse, il y a une version catégorisée de sa solution ici:
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";
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.
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];
}
C'est simple et la meilleure façon !
MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(230, -51, 40, 40)];
numberBadge.value = 5;
self.navigationController.navigationBar.layer.zPosition = -1;
[self.view addSubview:numberBadge];
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..!
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.
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 !!!
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
}
}