如何在UIBarbutton项目上添加徽章?

你好朋友是新的iphone开发。 我正努力在右边的UIBarbutton项上添加徽章值。 我试过了,但是我不能解决这个问题。 谁能帮我。

提前致谢!

我知道这个post是相当古老的,但与iOS7,MKNumberBadgeView的外观并不真正匹配标签栏项徽章devise。 我发现了这个其他组件,它放置UIBarButtonItem并很好地完成这项工作:

https://github.com/TanguyAladenise/BBBadgeBarButtonItem

希望这可以帮助像我这样的其他iOS7开发者

最后,我find了在UIBarbutton项目上添加徽章的方法。 我搜查了很多,但没有find正确的答案。 所以我创build了UIButton并将其添加为右键项目上的自定义视图。 添加添加MKNumberBadgeView来显示徽章号码。 下面我添加我的代码给你。

// 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; 

谢谢。

phyzalis有一个很好的答案,这里有一个他的解决scheme的分类版本:

的UIBarButtonItem +徽章

以下是您可以如何使用它的方法:

 // 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"; 

我做了类似于MaxMa的东西,但是我直接将徽章直接添加到self.navigationController.navigationBar。

在这里输入图像说明

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

只要确保在viewWillDisappear中将其从子视图中删除,并在viewDidAppear期间将其添加回来。 它似乎还有点不好意思,但是我更喜欢这个黑客,然后改变导航栏的顺序。

在查看期间将其删除将会消失

 - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [numberBadge removeFromSuperview]; } 

这很简单,也是最好的方法!

在这里输入图像说明

 MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(230, -51, 40, 40)]; numberBadge.value = 5; self.navigationController.navigationBar.layer.zPosition = -1; [self.view addSubview:numberBadge]; 

我知道这已经被解决了,但为了完整起见,我想我可以把我发现的东西加到这个答案上。

您也可以直接将MKNumberBadgeView添加到MKNumberBadgeView的视图。 使用Monotouch(C#),这是如何获得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> 

我相信很容易把它转换成Obj-C。 您还需要使用徽章的框架来使其显示在正确的位置。

这样你就不必从导航栏中删除/添加视图。

更新了Swift 3:

使用下面的简单代码在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() 

//注意:根据您收到的通知,增加徽章。您必须根据您的逻辑编写代码,即如何在数据库中维护徽章计数。

享受..!