ios 如何在自定义 UIBarButtonItem 上放置徽章
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24180946/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to put a badge on customized UIBarButtonItem
提问by niper007
I have a navigation bar with two buttons, one is a back button the other a chat symbol.
我有一个带有两个按钮的导航栏,一个是后退按钮,另一个是聊天符号。
I write this code like this:
我这样写这段代码:
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];
The problem I have is that whenever there is some new messages in the chat that I have not seen, there should be like a badge of some sort, or a customized label over the chat button, to indicate how many new messages you have.
我遇到的问题是,每当聊天中有一些我没有看到的新消息时,都应该有某种徽章,或者聊天按钮上的自定义标签,以指示您有多少新消息。
How do I do this?
我该怎么做呢?
回答by Wilson
for Swift 3.0:
对于Swift 3.0:
Result:
结果:
Code:
代码:
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")
}
回答by Ronaldoh1
in iOS 8 - I was able to do it by changing the badgeValue
在 iOS 8 中 - 我能够通过更改徽章值来做到这一点
self.messageButton.badgeValue = @"5";
where message button is a UIBarButton
其中消息按钮是 UIBarButton
You have to include these two files to your xcode UIBarButtonItem+Badge.h UIBarButtonItem+Badge.m
您必须将这两个文件包含到您的 xcode UIBarButtonItem+Badge.h UIBarButtonItem+Badge.m
which can be found here
可以在这里找到
回答by Kuldeep Choudhary
You can try this piece of code:-
你可以试试这段代码:-
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;
回答by Pavel
Good day! Here is my version - easy and without any problems:
再会!这是我的版本 - 简单且没有任何问题:
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];
have a nice day!
祝你今天过得愉快!
回答by Anbu.Karthik
try custom methods
尝试自定义方法
回答by jos
回答by Muruganandham K
Try this customized control - mknumberbadgeview