iOS tabBarItem 徽章值从任何视图更改

iOS tabBarItem badge value change from any View

我正在使用 objective c 开发一个 iOS 应用程序。在我的应用程序中,如果用户未注册,则注册视图控制器为 rootViewController。如果用户已注册,则 tabBarController 具有三个选项卡是 rootViewController。我必须从任何视图控制器设置 tabBarItem 徽章值。假设我在第三个选项卡上并且它正在与另一个视图控制器进行连接并且我在那个视图控制器上,我必须从这里更改第一个视图控制器的 tabBarItem 徽章值。在我的例子中,tabBarItem 徽章值更新只有我在使用

时转到该选项卡
NSString *upcomingcount=[NSString stringWithFormat:@"%lu",(unsigned long)self.arrbadge.count];
            self.navigationController.tabBarItem.badgeValue=upcomingcount;

将出现在视图中。

有什么方法可以从任何 ViewController 设置 badgeValue 吗?我想更新任何 ViewController

的徽章值

您可以使用 KVO 来观察您 upcomingcount 的变化并更新您的徽章值。

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

        if ([keyPath isEqualToString:NSStringFromSelector(@selector(upcomingcount))]) {
            //SET BADGE VALUE HERE

        }

}

请在您的应用委托中使用此方法

 - (void)update_badgeWithViewControllerIndex:(NSInteger)ViewControllerIndex {


            UITabBarController *tabBarController =(UITabBarController*)[[(AppDelegate*)
                                                                         [[UIApplication sharedApplication]delegate] window] rootViewController];


              // Set the tab bar number badge.
              UITabBarItem *tab_bar = [[tabBarController.viewControllers objectAtIndex:ViewControllerIndex] tabBarItem];

              // Show the badge if the count is
              // greater than 0 otherwise hide it.

              if ([badgeValue > 0) {
                  [tab_bar setBadgeValue:badgeValue]; // set your badge value
              }

              else {
                  [tab_bar setBadgeValue:nil];
              }



    }

使用此方法 在每个 viewController 创造

@property (nonatomic,strong) AppDelegate *appDelegate;




self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

  [self.appDelegate update_badgeWithViewControllerIndex:yourViewControllerIndex];
func setBadge(){
        let viewconrollers = self.tabBarController?.viewControllers
        viewconrollers![3].tabBarItem.badgeValue = "Your String value"
        viewconrollers![3].tabBarItem.badgeColor = UIColor.green
    }


//call setBadge() method from view controller's viewdidload method.

// select your give number it the view controllers array for providing badge on the desired tab