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

问题描述 投票:-1回答:3

我正在使用目标c开发iOS应用程序。在我的应用程序,如果用户没有注册,那么注册视图控制器是rootViewController。如果用户注册,那么tabBarController有三个选项卡是rootViewController。我必须从任何视图控制器设置tabBarItem徽章值。假设我在第三个选项卡上并且它与另一个视图控制器有segue并且我在该视图控制器上,我必须从这里更改第一个视图控制器的tabBarItem徽章值。在我的情况下,tabBarItem徽章值更新只有我去我正在使用的选项卡

NSString *upcomingcount=[NSString stringWithFormat:@"%lu",(unsigned long)self.arrbadge.count];
            self.navigationController.tabBarItem.badgeValue=upcomingcount;

在viewwillappear。

有没有办法从任何ViewController设置badgeValue?我想更新任何ViewController徽章价值

ios objective-c uitabbarcontroller uitabbaritem
3个回答
1
投票

plz在您的app委托中使用此方法

 - (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];

0
投票

您可以使用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

        }

}

0
投票
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 
© www.soinside.com 2019 - 2024. All rights reserved.