我正在使用目标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
徽章价值
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];
您可以使用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
}
}
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