在UINavigationbar中显示类似计数器的通知徽章

时间:2013-01-24 10:38:45

标签: iphone ios uinavigationbar uibarbuttonitem

我要求在iPhone导航栏中显示待处理通知的数量。外观应该与通知徽章的外观相似 - 但这些不是APNS通知。它们是从具有类似目的的私人服务器发送的。

我尝试在我的UIBarButtonItem中添加一个向右/向左按钮(UINavigationbar)但看起来外观非常严格。我无法设置其宽度,字体等。请参阅我的代码:

  self.notifButton = [[UIBarButtonItem alloc] initWithTitle:@"0" style:
                    UIBarButtonItemStyleBordered target:self action:@selector(TouchNotif)];

 NSMutableArray *items = [[NSMutableArray alloc] init];

 [items addObject:self.notifButton];
 self.navigationItem.rightBarButtonItems = items;

由于其他2个项目也添加到items数组中,因此navbar变得杂乱无章。他们的字体,宽度等我不能玩,或者我不知道应该怎么创建它们。

我的问题:

1)在导航栏右侧区域内容纳至少3个项目的正确方法是什么?我问这个是因为我找不到一种方法来播放我使用的UIButtons的宽度和字体。

2)如果我想为我的通知按钮设置自定义外观(就像通知徽章一样) - 是否有任何指示我如何制作它?要使用哪种控件,如何设置UINavigationBar中允许的框架和字体?

请帮忙。

3 个答案:

答案 0 :(得分:9)

您需要使用UIBarButtonItem创建包含自定义视图的initWithCustomView。 自定义视图可以是自定义UIButton,其中数字徽章作为子视图。使用此自定义视图,您还可以控制按钮的宽度。

没有公共API可以直接创建通知徽章。如果是标签栏项目,您可以使用属性badgeValue设置徽章,但不能使用UIBarButtonItem设置徽章。 在这里,您需要使用此开源控件:MKNumberBadgeView

请注意,自iOS 5起,属性rightBarButtonItems可用。 如果您只需要一个项目设置rightBarButtonItem而不是。

答案 1 :(得分:0)

UIButton * buttton = [UIButton buttonWithType:UIButtonTypeCustom];
[buttton setFrame:CGRectMake(285, 20, 20, 20)];
[buttton.layer setCornerRadius:10];
[buttton setTitle:@"23" forState:UIControlStateNormal];
[buttton.titleLabel setFont:[UIFont systemFontOfSize:12]];
[buttton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[buttton setBackgroundColor:[UIColor whiteColor]];
[self.navigationController.view addSubview:buttton];

答案 2 :(得分:-1)

首先通过

获取navigationController中的相应barbuttonitem
let baritem = navigationItem.right/leftBarButtonItem
baritem.badgeValue = "\(correspondingValues)"