如何在iPhone上单击应用程序图标清除徽章计数器?

时间:2014-12-05 08:43:45

标签: ios objective-c iphone swift apple-push-notifications

我们使用phonegap开发了一个ios应用程序,并在我们的应用程序中实现了推送通知功能。 推送通知对我们来说非常好。我们已经为两者(警报和徽章)配置了推送通知,两者都可以正常工作。 当我们点击警报列表时,它会将我们重定向到应用程序并清除警报列表中的所有通知,并且徽章计数器也会设置为0.

但是当我们点击应用程序图标(徽章计数器)时,它会将应用程序带到前台,但徽章计数器和警报不会被清除。

我们在didFinishLaunchingWithOptions方法(在appdelegate.m文件中)中使用了以下代码,该方法清除警报并仅在点击警报时重置徽章

 application.applicationIconBadgeNumber = 0;

当我们点击带有徽章计数器的应用程序图标时,任何人都可以向我们提供显示相同行为的解决方案。

4 个答案:

答案 0 :(得分:21)

要在应用程序变为活动状态时清除徽章计数,请使用delegate方法

applicationWillEnterForeground applicationDidBecomeActive

中调用 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
- (void)applicationWillEnterForeground:(UIApplication *)application

{
 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
 }

- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}

<强>夫特

func applicationWillEnterForeground(application: UIApplication) {
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}

func applicationDidBecomeActive(application: UIApplication) {
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}

对于Swift 3:

UIApplication.shared.applicationIconBadgeNumber = 0

enter image description here

答案 1 :(得分:3)

在Swift中,以下内容适用于func applicationWillEnterForeground(application: UIApplication)

UIApplication.sharedApplication().applicationIconBadgeNumber = 0

答案 2 :(得分:0)

如果您在支持多个窗口的iOS 13上,请像这样激活“场景变为活动”方法。 此方法位于SceneDelegate上。

func sceneDidBecomeActive(_ scene: UIScene) {
    UIApplication.shared.applicationIconBadgeNumber = 0;
}

答案 3 :(得分:0)

这就是我重置和删除它的方式。你可以在任何 vc 中调用它,假设它可以访问 tabBarController:

func resetAndRemoveTabBarBadge() {
    
    UIApplication.shared.applicationIconBadgeNumber = 0

    if let tabItems = tabBarController?.tabBar.items {

        let item = 4 // this is whichever tabBarItem you set the badge to appear on

        let tabItem = tabItems[item]
        tabItem.badgeValue = nil
    }
}