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.

War es hilfreich?

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);
    }
}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top