Das UIAppearance- Protokoll wurde 2011 in iOS 5 veröffentlicht, in jenen fernen Zeiten, in denen Instagram keine Android-Anwendung hatte und die Seriennummer Ned Stark noch nicht abgeschnitten wurde.
Über EddardDie Meister schickten mir einen Raben mit der Nachricht, dass sie zum Zeitpunkt der Veröffentlichung von iOS 5 bereits abgehackt waren. Aber um die rote Hochzeit oder etwas anderes nicht zu verderben, lasse ich vielleicht alles so wie es ist.
Es gibt genügend Informationen, Tutorials und Artikel zu diesem Thema. Jeder iOS-Anfänger weiß, wie und warum er es verwendet. In diesem Artikel geht es also nicht darum. Ich möchte über das Thema nachdenken, was mit ihm los ist und warum Apple nicht darauf achtet.
Als kleine Einführung sind und sollten Auszüge aus der Dokumentation , die immer war, die wichtigste vertrauenswürdige Informationsquelle sein.
Sie können das Erscheinungsbild von Instanzen einer Klasse anpassen, indem Sie Meldungen zur Änderung des Erscheinungsbilds an den Erscheinungsbild-Proxy der Klasse senden.
Um die Anpassung des Erscheinungsbilds zu unterstützen, muss eine Klasse dem UIAppearanceContainer-Protokoll entsprechen und relevante Zugriffsmethoden müssen mit UI_APPEARANCE_SELECTOR gekennzeichnet sein
Für mich selbst verstehe ich das so: Wenn Sie die Standarddarstellung für alle Objekte der Klasse ändern möchten, die UIAppearance implementiert, überprüfen Sie, ob die Eigenschaft mit UI_APPEARANCE_SELECTOR markiert ist , und gehen Sie. Wenn die Eigenschaft nicht UI_APPEARANCE_SELECTOR ist , funktioniert dies dementsprechend nicht.
"Erfolgreich" bedeutet jedoch nicht "Sie können es nicht versuchen". Ich empfehle daher allen, die neugierig auf ein einfaches Experiment sind: Öffnen Sie das erste Projekt, das Sie erhalten, und fügen Sie der application:didFinishLaunchingWithOptions:
die folgende Zeile hinzu application:didFinishLaunchingWithOptions:
method:
UIView.appearance().isHidden = true
Schätzen Sie, was passieren und laufen wird.
Ich würde wie eine Langeweile mögliche Optionen erwarten:
- es passiert nichts;
- Es passiert nichts, aber ein Protokoll wie "isHidden is not UI_APPEARANCE_SELECTOR, dumm" fällt in die Konsole.
- Die Anwendung erkennt einen kritischen Fehler oder bestätigt dies mit einer ähnlichen Meldung.
Aber nein, alles, einschließlich des Hauptanwendungsfensters, wird ausgeblendet. Einerseits ist es sogar logisch - was geschrieben steht, wird getan. Andererseits sieht es nach undokumentiertem Verhalten aus und scheint mir ein ziemlich großes Loch zu sein.
Ich könnte mich immer noch damit abfinden, dass solche Tricks nur mit den Eigenschaften gedreht werden könnten, die das Erscheinungsbild beeinflussen, aber dies kann mit allen Eigenschaften geschehen!
Wenn Sie beispielsweise dem Code hinzufügen, den andere Projekte als Bibliothek eines Drittanbieters verwenden, sehen Sie hier eine Zeile, die manchmal zu einem zufälligen Zeitpunkt aufgerufen wird:
UITableView.appearance().delegate = nil
Sie können alle Delegaten auf alle Tabellen zurücksetzen, die nach Ausführung dieses Codes auf dem Bildschirm angezeigt werden.
Entwickler werden viel Spaß haben, herauszufinden, was passiert ist! Sicherlich können Sie sich etwas einfallen lassen, das noch mehr Spaß macht!
Ich hoffe wirklich, dass solche Dinge von Apple nicht unbemerkt blieben (ich habe keine Informationen zu diesem Thema gefunden), und solche Tricks werden irgendwo in der Phase der automatischen Baugruppenüberprüfung in AppstoreConnect enthüllt. Aber um ehrlich zu sein, habe ich keine Lust zu überprüfen.
Solche Dinge, Leute. Ich werde gerne diskutieren, ob sich auch jemand für das Thema interessiert.
PS Gib mir mein 2011 zurück!