2016-07-27 6 views
-1

목표를 사용하여 iOS 앱을 개발하고 있습니다. c. 내 응용 프로그램에서 사용자가 등록되지 않은 경우 등록보기 컨트롤러는 rootViewController입니다. 사용자가 등록 된 경우 tabBarController은 세 개의 탭을 가지고 rootViewController입니다. 모든보기 컨트롤러에서 tabBarItem 배지 값을 설정해야합니다. 세 번째 탭에 있고 다른보기 컨트롤러와 함께 segue가 있고 그보기 컨트롤러에 있다고 가정 할 때, 여기에서 첫 번째보기 컨트롤러의 tabBarItem 배지 값을 변경해야합니다. 내가 viewwillappear에iOS tabBarItem 배지 값이 모든보기에서 변경됩니다.

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

을 사용하고 나의 경우에 tabBarItem 배지 값의 업데이트는 그 탭으로 이동합니다.

badgeValue를 ViewController에서 설정하는 방법은 무엇입니까? 0에서 배지 값을 업데이트하고 싶습니다. ViewController

답변

1

PLZ마다의 ViewController에서이 방법 가 작동하지

@property (nonatomic,strong) AppDelegate *appDelegate; 




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

    [self.appDelegate update_badgeWithViewControllerIndex:yourViewControllerIndex]; 
+0

만들어 사용

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

앱 위임에이 방법을 사용! 여전히 배지 업데이트는 해당 뷰 컨트롤러로 이동하는 경우에만 수행됩니다. 응답을위한 감사합니다 – goks

+0

사실 나는 또한 다른 방법 라운드를 시도했다. 보기 컨트롤러 및 메서드의 프로토콜을 만들고 AppDelegate.m에 메서드를 위임합니다. AppDelegate.h에 현재보기 컨트롤러의 .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 

     } 

}