2016-07-27 28 views
-1

Im Entwickeln einer iOS-App mit Ziel c. Wenn der Benutzer in meiner App nicht registriert ist, dann ist der Registeransicht-Controller rootViewController. Wenn der Benutzer registriert ist, dann ist tabBarController mit drei Registerkarten rootViewController. Ich muss tabBarItem Abzeichen Wert von jedem View-Controller einstellen. Angenommen, ich bin auf der dritten Registerkarte und es ist mit einem anderen View-Controller segue und ich bin auf dieser Ansicht Controller, ich muss den tabBarItem Abzeichen Wert des ersten View-Controller von hier ändern. in meinem Fall nur der tabBarItem Abzeichen Wert Update gehe ich zu diesen Registerkarte als iiOS TabBarItem Badge Wert ändern von jeder Ansicht

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

in ViewWillAppear verwenden.

Gibt es eine Möglichkeit, den badgeValue von einem beliebigen ViewController zu setzen? Ich möchte den Ausweiswert von einem beliebigen ViewController aktualisieren

Antwort

1

plz diese Methode in AppDelegate verwenden

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



    } 

für die Verwendung dieser Methode in jedem Viewcontroller

@property (nonatomic,strong) AppDelegate *appDelegate; 




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

    [self.appDelegate update_badgeWithViewControllerIndex:yourViewControllerIndex]; 
erstellen
+0

funktioniert nicht !! Immer noch nur Badge-Updates, wenn wir auf diesen View-Controller gehen. danke für die Antwort – goks

+0

habe ich tatsächlich auch anders herum ausprobiert. erstellt Protokoll des View-Controllers und Ihre Methode und delegiere die Methode an AppDelegate.m, include .h-Datei meines aktuellen View-Controllers in AppDelegate.h deklariere das Protokoll und nun xcode mit dem seltsamen Fehler "" Protokolldeklaration für ... .... "" ". – goks

+0

danke hab eine idee von deiner antwort ... funktioniere jetzt – goks

0

Sie können KVO verwenden, um die Änderung in Ihrem upcomingcount zu beobachten und Ihren Ausweiswert zu aktualisieren.

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

     } 

}