如何在自定义UIBarButtonItem上放置徽章

我有一个带两个按钮的导航栏,一个是后退按钮,另一个是聊天符号。

我这样编写代码:

UIBarButtonItem *_btn=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"back.png"] style:UIBarButtonItemStylePlain target:self action:@selector(goBackToPreviousView)]; self.navigationItem.leftBarButtonItem=_btn; self.navigationItem.leftBarButtonItem.tintColor = [UIColor blackColor]; UIBarButtonItem *_btn2=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"chat.png"] style:UIBarButtonItemStylePlain target:self action:@selector(startChat)]; self.navigationItem.rightBarButtonItem=_btn2; self.navigationItem.rightBarButtonItem.tintColor = [Utility colorWithHexValue:CyanBlue]; 

我遇到的问题是,每当聊天中有一些我没有看过的新消息时,应该有一些类型的徽章或聊天按钮上的自定义标签,以指示您有多少新消息。

我该怎么做呢?

对于Swift 3.0

结果:

在此处输入图像描述

码:

 override func viewDidLoad() { super.viewDidLoad() // badge label let label = UILabel(frame: CGRect(x: 10, y: -10, width: 20, height: 20)) 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.font = UIFont(name: "SanFranciscoText-Light", size: 13) label.textColor = .white label.backgroundColor = .red label.text = "80" // button let rightButton = UIButton(frame: CGRect(x: 0, y: 0, width: 18, height: 16)) rightButton.setBackgroundImage(UIImage(named: "inbox"), for: .normal) rightButton.addTarget(self, action: #selector(rightButtonTouched), for: .touchUpInside) rightButton.addSubview(label) // Bar button item let rightBarButtomItem = UIBarButtonItem(customView: rightButton) navigationItem.rightBarButtonItem = rightBarButtomItem } func rightButtonTouched() { print("right button touched") } 

在iOS 8中 – 我可以通过更改badgeValue来实现

  self.messageButton.badgeValue = @"5"; 

消息按钮是UIBarButton

你必须将这两个文件包含在你的xcode UIBarButtonItem + Badge.h中.UIBarButtonItem + Badge.m

可以在这里找到

Github链接到文件

你可以尝试这段代码: –

  UILabel *badgeLbl = [[UILabel alloc]initWithFrame:CGRectMake(16, -2, 18, 18)]; badgeLbl.backgroundColor = [UIColor whiteColor]; badgeLbl.textColor = [UIColor blackColor]; badgeLbl.textAlignment = NSTextAlignmentCenter; badgeLbl.layer.cornerRadius = 9.0; badgeLbl.layer.masksToBounds = true; badgeLbl.text = @"10"; UIButton *notificationBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 35, 35)]; [notificationBtn setBackgroundImage:[UIImage imageNamed:@"image_name"] forState:UIControlStateNormal]; [notificationBtn setTitle:@"" forState:UIControlStateNormal]; [notificationBtn addTarget:self action:@selector(onClickAction:) forControlEvents:UIControlEventTouchUpInside]; [notificationBtn addSubview:badgeLbl]; UIBarButtonItem *notificationBarBtn = [[UIBarButtonItem alloc]initWithCustomView:notificationBtn]; self.navigationItem.rightBarButtonItem = notificationBarBtn; 

美好的一天! 这是我的版本 – 简单而没有任何问题:

 navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, 64)]; [self.view addSubview:navBar]; navItem = [[UINavigationItem alloc] initWithTitle:NSLocalizedString(@"Meetings", nil)]; [navBar pushNavigationItem:navItem animated:NO]; UIButton *chat = [UIButton buttonWithType: UIButtonTypeRoundedRect]; [chat setTitle:@"Chat" forState: UIControlStateNormal]; UILabel *badge = [[UILabel alloc] initWithFrame: CGRectMake(0, 0, 20, 20)]; badge.textColor = [UIColor darkGrayColor]; badge.font = [UIFont fontWithName: fontName size: 15]; badge.text = @"10"; badge.textAlignment = NSTextAlignmentCenter; badge.layer.cornerRadius = 10.0f; badge.layer.backgroundColor = [UIColor yellowColor].CGColor; badge.clipsToBounds = YES; badge.center = CGPointMake(50, 20); [chat addSubview: badge]; navItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: chat]; 

祝你今天愉快!

你可以尝试这个类别

的UIBarButtonItem徽章

试试这个自定义控件 – mknumberbadgeview