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

Yuv*_*j.M 33 uinavigationbar uibarbuttonitem badge ios

嗨朋友是iphone开发的新手.我很难在右侧的UIBarbutton项目上添加徽章值.我试过但我无法解决这个问题.谁能帮我.

提前致谢!

phy*_*lis 30

我知道这篇文章很老但是对于iOS7,MKNumberBadgeView的外观与标签栏项目徽章设计并不完全匹配.我找到了另一个组件,它可以很好地完成UIBarButtonItem:

https://github.com/TanguyAladenise/BBBadgeBarButtonItem

希望这可能有助于像我这样的其他iOS7开发者


Yuv*_*j.M 29

最后我找到了在UIBarbutton项目上添加徽章的方法.我搜索了很多,但没有找到正确的答案.所以我创建了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;
Run Code Online (Sandbox Code Playgroud)

谢谢.


Mik*_*ike 19

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

的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";
Run Code Online (Sandbox Code Playgroud)


Tod*_*ham 12

我做了类似于MaxMa的事情,但我只是继续将徽章直接添加到self.navigationController.navigationBar.

在此输入图像描述

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

[self.navigationController.navigationBar addSubview:numberBadge];
Run Code Online (Sandbox Code Playgroud)

只需确保在viewWillDisappear期间将其从子视图中删除,然后在viewDidAppear期间将其添加回来.它似乎有点hacky,但我更熟悉这个hack然后更改导航栏z顺序.

在viewWillDisappear中删除它

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [numberBadge removeFromSuperview]; 
}
Run Code Online (Sandbox Code Playgroud)


小智 7

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

在此输入图像描述

MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(230, -51, 40, 40)];
numberBadge.value = 5;

self.navigationController.navigationBar.layer.zPosition = -1;
[self.view addSubview:numberBadge];
Run Code Online (Sandbox Code Playgroud)


Kir*_*hav 5

为 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()
Run Code Online (Sandbox Code Playgroud)

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

享受..!?