将推送通知徽章添加到UIButton

时间:2014-02-17 14:13:20

标签: ios objective-c uibutton push-notification badge

我想在发送通知时向我的应用内的UIButton添加徽章图标,我不太清楚如何实现这一点。它需要匹配跳板图标上的徽章,当在应用程序中按下UIButton时,UIButton上的跳板徽章和徽章都需要消失。

更新:

我有一个徽章出现但是当我打开应用程序时,徽章会在应用程序打开时重置为零,所以我最终没有看到按钮上的徽章。我知道徽章有效,因为我通过这样做测试了它:

[[UIApplication sharedApplication]setApplicationIconBadgeNumber:1];

以下是徽章的代码:

NSString *badgeNumber = [NSString stringWithFormat:@"%d", [[UIApplication sharedApplication]applicationIconBadgeNumber]];

    JSCustomBadge *actionAlertBadge = [JSCustomBadge customBadgeWithString:badgeNumber];
    actionAlertBadge.frame = CGRectMake(188, 6, 30, 30);

    [self.view addSubview:actionAlertBadge];

    if ([badgeNumber isEqual:@"0"])
    {
        actionAlertBadge.hidden = YES;
    }

如何在打开应用程序时不会重置徽章,而是在应用程序中按下该按钮时重置?

我有这个工作,但仍然有一个问题。如果应用程序未在后台运行,则徽章会显示在跳板图标和UIButton上。按下按钮时,将打开新视图并重置徽章,以便当用户使用UIButton返回屏幕时,徽章不再存在。我遇到的问题是,当应用程序在后台运行时,徽章不会显示在按钮上,而是显示在跳板上。

- (IBAction)gotoActionAlerts
{
    ActionAlertsViewController *actionAlerts = [[ActionAlertsViewController alloc]initWithStyle:UITableViewStylePlain];
    WebViewController *wvc = [[WebViewController alloc]init];
    [actionAlerts setWebViewController:wvc];
    actionAlerts.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [[UAPush shared] resetBadge];
    actionAlertBadge.hidden = YES;
    [self.navigationController pushViewController:actionAlerts animated:YES];
}  

在viewDidLoad

badgeNumber = [NSString stringWithFormat:@"%d", [[UIApplication sharedApplication]applicationIconBadgeNumber]];

    actionAlertBadge = [JSCustomBadge customBadgeWithString:badgeNumber];
    actionAlertBadge.frame = CGRectMake(83, 6, 30, 30);

    [self.view addSubview:actionAlertBadge];

    if ([badgeNumber isEqualToString:@"0"])
    {
       actionAlertBadge.hidden = YES;
    }

1 个答案:

答案 0 :(得分:2)

对于UIButton上的徽章您可以使用一些可用的自定义库here

要设置/获取您的应用程序徽章,您可以使用方法,

[UIApplication sharedApplication]setApplicationIconBadgeNumber:1]

修改

The issue I'm having is when the app is running in the background, the badge doesn't show on the button, but shows on the springboard.

如果您的应用处于背景徽章,则会在应用图标上显示,如果您使用推送通知而不是从有效负载设置的徽章值,

{"aps": {"alert":"content test","badge":1,"sound":"default"}}

或者您正在使用UILocalNotification的applicationIconBadgeNumber属性中设置的localnotification徽章值,即

 notification.applicationIconBadgeNumber=1;

因此,如果您的应用程序在后台,您有两种不同通知的委托方法,

为了推送通知,请实施委托方法本地通知didReceiveLocalNotification:didReceiveRemoteNotification:

因此,请在实施前参考Apple Document