Obecnie dostosowuję obraz tła paska nawigacji w aplikacji na iOS przy użyciu proxy UIAppearance. Jest przycisk do przełączania między dwoma różnymi trybami, który wyzwala powiadomienie. To powiadomienie zmieni tło dla innego obrazu, ponownie używając proxy. Mój problem polega na tym, że zmiana ta staje się widoczna tylko wtedy, gdy przechodzę do innego kontrolera i wracam do niego. Nie jestem w stanie wymusić aktualizacji paska nawigacji w kontrolerze.Aktualizowanie paska nawigacji po zmianie za pomocą UIAppearance
Próbowałem to w moim MainTabBarController:
- (void) onAppChangedMode: (NSNotification*)notif {
APP_MODE mode = (APP_MODE) [[notif object] integerValue];
// change navigation bar appearance
[[UILabel appearance] setHighlightedTextColor:[UIColor redColor]];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:(mode == 0 ? @"navbar.png" : @"navbar2.png")] forBarMetrics:UIBarMetricsDefault];
// trying to update
for (UIViewController* vc in self.viewControllers) {
[vc.navigationController.navigationBar setNeedsDisplay];
}
}
... ale nic nie działa. Każdy pomysł, jak to osiągnąć?
Dzięki!
Nie wiem dlaczego, ale zmiany do uiappearance w czasie wykonywania nie będą miały zastosowania do załadowanych widoków. Możesz jednak natychmiast zastosować zmiany w załadowanych widokach. – ilmiacs
to znaczy, że nie mogę używać UIAppearance, ale muszę ustawić każdy pasek osobno – Claus
Nie. Możesz użyć UIAppearance, ale wyświetlane widoki nie zostaną zmienione. Więc ten pasek wyświetlany powinien być jawnie ustawiony. – ilmiacs