global tintColor wechseln

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • global tintColor wechseln

    ich möchte zur Laufzeit einer App die tintColor wechseln können.

    Quasi als wesentlichen Teil eines Schemas das in einem SetUp gewählt werden kann.
    Das aktuelle Schema halte ich in NSUserDefaults.

    Bei Start der App lese ich in der AppDelegate.m das Schema aus . Funktioniert super.

    C-Quellcode

    1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    2. ...
    3. [self.window setTintColor:[schemaDict objectForKey:@"TintColor"]];
    4. return YES;
    5. }
    Wenn ich jetzt im SetupVC ein anders Schema wähle, will ich die Änderung ja nicht erst beim nächsten Start sehen. :rolleyes:

    Wie und wo kann ich der App die neue tintColor mitteilen und wie kann ich das sofort für "alles" aktive wie toolBars, uibarbuttons usw nutzen?
    [Blockierte Grafik: http://www.hape42.de/aaa.png][Blockierte Grafik: http://www.hape42.de/aaa.png]aaa.png
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hape42 ()

  • matz schrieb:



    Blind getippt, schon lange keine Objective-C mehr gemacht :)
    Das sieht man... Punktnotation ist nun auch in Objective-C angekommen :D

    Ohne es ausprobiert zu haben, würde ich - inzwischen - die folgende Schreibweise bevorzugen:

    Quellcode

    1. [UIApplication sharedApplication].delegate.window.tintColor = schemaDict[@"TintColor"];
    Ändert aber rein gar nichts an Deiner Aussage, dass ein Setzen des Attributes eigentlich ausreichen müsste. Allerdings vermute ich, dass @hape42 das schon probiert hatte...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Danke, aber wie MyMattes schon vermutete, da war ich schon <X

    wie man womöglich am screenshot erkennen kann, sollte sich die Farbe zB vom UISegmentedControl von Grün nach Rot ändern wenn ich das rechte Schema wähle.
    Alles, was man in den darunter liegenden Views bzw VCs sieht, wird durch notifications erreicht.

    Aber wie ändere ich "automatisch" die Farben der toolBars und BarItems?

    ich hab es mit
    [self.view setNeedsDisplay];
    und
    [self viewDidLoad];
    und
    [self viewWillAppear:YES];

    aber die toolBar ändert sich nicht.

    bin ich da mit der tintColor auf dem falschen Weg? ?(
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • Ups, habe eben grade diesen Abschnitt im von mir verlinkten Artikel gelesen:

    Apple schrieb:

    iOS applies appearance changes when a view enters a window, it doesn’t change the appearance of a view that’s already in a window. To change the appearance of a view that’s currently in a window, remove the view from the view hierarchy and then put it back.
    Das könnte Deine Problem erklären, @hape42. Nur die Lösung in Deinem konkreten Fall bleibe ich nun schuldig...

    Mattes

    Edit: Nun fällt mir nur sowas Dreckiges wie Outlets ein, mit Hilfe derer Du die tintColor der konkreten Objekte direkt änderst.
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • matz schrieb:

    Sollte doch über

    Quellcode

    1. [[[[UIApplication sharedApplication] delegate] window] setTintColor: [schemaDict objectForKey:@"TintColor"]]
    klappen.

    Blind getippt, schon lange keine Objective-C mehr gemacht :)
    da muss ich mich entschuldigen. Es funktioniert genau so!

    Hatte den Wald vor lauter Bäumen nicht gesehen. Erst im debugger ist mir aufgefallen , dass diese Zeile gar nicht ausgeführt wird <X

    Sorry (und schäm...)
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42