При использовании splitViewController вы, вероятно, будете иметь detailViewController (UIViewController) и rootViewController (UINavigationController), где вы можете установить собственный массив UIBarButtonItem.После создания некоторых пользовательских изображений, одно из которых является значком, который изменяется при наличии сохраненных push-уведомлений, я считаю, что изменить значок, пока он видим, необычайно сложно.
-(void)seNavbarItems {
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *logout = [UIUtility createBarButtonItemWithImage:@"logout.png"];
[logout.customView addTarget:self action:@selector(logout:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:logout,flexibleSpace,nil];
UIImageView *home = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title.png"]];
self.navigationItem.titleView = home;
UIBarButtonItem *settings;
if([UIApplication sharedApplication].applicationIconBadgeNumber > 0) {
settings = [UIUtility createBarButtonItemWithImage:@"settings_alarm.png"];
}
else {
settings = [UIUtility createBarButtonItemWithImage:@"settings.png"];
}
[settings.customView addTarget:self action:@selector(settings:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:settings,flexibleSpace,nil];
}
Точки останова внутри applicationIconBadgeNumber, когдаожидается, но значок не меняется.Если я перемещусь вперед или назад, значок настроек изменится, как и ожидалось.Мне известно о dispatch_async (dispatch_get_main_queue (), ^ {..run setHomeNavbar метод ..}); потоковый подход, но, похоже, тоже не работает.
Есть лиспособ изменить свойство rightBarButtonItems без нажатия / нажатия rootViewController?Если у меня есть действие [appDelegate seNavbarItems]; , которое происходит в detailViewController, почему я не могу обновить rightBarButtonItems, отображаемое в rootViewController, с помощью кода выше?