2016-07-27 59 views
-1

使用目標c開發iOS應用程序。在我的應用程序中,如果用戶沒有註冊,那麼註冊視圖控制器是rootViewController。如果用戶是註冊,那麼tabBarController有三個選項卡是rootViewController。我必須從任何視圖控制器設置tabBarItem徽章值。假設如果我在第三個選項卡上並且它正在與另一個視圖控制器一起繼續,並且我在該視圖控制器上,則必須從此處更改第一個視圖控制器的徽章值tabBarItem。在我的情況下tabBarItem徽章值更新只有我去該標籤,我在viewWillAppear中使用iOS tabBarItem徽章值從任何視圖更改

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

有沒有什麼辦法可以從任何ViewController中設置badgeValue?我想更新任何徽章值ViewController

回答

1

PLZ使用此方法在應用程序委託

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

不工作!只有當我們繼續使用視圖控制器時,仍然會更新徽章。感謝您的回覆 – goks

+0

事實上,我已經嘗試了另一種方式。創建的視圖控制器和你的方法的協議和委託方法到AppDelegate.m,包括我的當前視圖控制器的.h文件在AppDelegate.h宣佈協議,現在xcode給出奇怪的錯誤「」無法找到協議聲明...... ....「」「。 – goks

+0

謝謝你從答案中得到了一個主意......現在工作 – goks

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 

     } 

}