Ttstylesheet funktioniert nicht beim restauriert von ttnavigator
-
29-10-2019 - |
Frage
Ich verwende Version 1.1 der Three20-Bibliothek und lege ein globales Stylesheet fest, um den navigationBarTintColor
in meinem App-Delegaten wie folgt zu ändern:
[TTStyleSheet setGlobalStyleSheet:
[[[DefaultStyleSheet alloc] init] autorelease]];
Das funktioniert einwandfrei, außer wenn mein App-Status durch Aufrufen von restoreViewControllers
in TTNavigator
wiederhergestellt wird.In diesem Fall zeigt die Navigationsleiste die hellblaue Standardfarbe für iOS an.Wenn ich zur nächsten Ansicht navigiere, wird das Stylesheet wieder wirksam.
Ich habe diese Frage auch in der Three20 Google Group veröffentlicht.Ich werde hier aktualisieren, wenn ich dort natürlich eine Antwort finde.
Lösung
In der Zwischenzeit habe ich mit Hilfe der freundlichen Leute auf der Three20 Google Group .
Kurz gesagt: Das globale Stylesheet funktioniert ordnungsgemäß, wenn alle View Controller von TTViewController abstammen.Wenn Sie direkt von UIViewController erben, ist eine Umgehung erforderlich das gewünschte Verhalten erzwingen.Verwenden Sie entweder Kategorien oder eine allgemeine Superklasse, um die folgende Methode für Ihre Ansichtscontroller zu implementieren:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Work-around for Three20 style sheet misbehavior. See:
// http://groups.google.com/group/three20/browse_thread/thread/affbd2a0ee2851c8
// http://stackoverflow.com/questions/5406827/ttstylesheet-not-workin-when-restored-by-ttnavigator
if (self.navigationController) {
self.navigationController.navigationBar.tintColor = TTSTYLEVAR(navigationBarTintColor);
}
}