Le protocole UIAppearance est apparu dans iOS 5 en 2011, à une époque lointaine où Instagram n'avait pas d'application Android, et la série Ned Stark n'était pas encore coupée.
À propos d'EddardLes maîtres m'ont envoyé un corbeau avec la nouvelle qu'au moment de la sortie d'iOS 5, ils avaient déjà été coupés. Mais pour ne pas gâcher le mariage rouge ou autre chose, je laisserai peut-être tout comme ça.
Il y a suffisamment d'informations, de tutoriels, d'articles sur ce sujet, chaque développeur iOS débutant sait comment et pourquoi l'utiliser, donc cet article ne traite pas de cela. Je voudrais réfléchir à ce qui ne va pas chez lui et pourquoi Apple n'y prête pas attention.
En guise de petite introduction, des extraits de la documentation qui a toujours été, sont et devraient être la principale source fiable d'informations.
Vous pouvez personnaliser l'apparence des instances d'une classe en envoyant des messages de modification d'apparence au proxy d'apparence de la classe.
Pour prendre en charge la personnalisation de l'apparence, une classe doit être conforme au protocole UIAppearanceContainer et les méthodes d'accesseur pertinentes doivent être marquées avec UI_APPEARANCE_SELECTOR
Pour moi, je le comprends de cette façon: si vous voulez changer l'apparence par défaut pour tous les objets de la classe qui implémente UIAppearance , vérifiez si la propriété est marquée avec UI_APPEARANCE_SELECTOR et allez-y. Par conséquent, si la propriété n'est pas UI_APPEARANCE_SELECTOR , cela ne fonctionnera pas.
Mais "ne réussit pas" ne signifie pas "vous ne pouvez pas essayer", donc je suggère à tous ceux qui sont curieux de faire une expérience simple: ouvrez le premier projet que vous application:didFinishLaunchingWithOptions:
et ajoutez la ligne suivante à l' application:didFinishLaunchingWithOptions:
méthode:
UIView.appearance().isHidden = true
Estimez ce qui se passera et courrez.
Comme un ennuyeux, je m'attendrais à des options possibles:
- rien ne se passe;
- rien ne se passe, mais un journal comme "isHidden is not UI_APPEARANCE_SELECTOR, stupid" tombe dans la console;
- L'application intercepte une erreur critique ou affirme avec un message similaire.
Mais non, tout, y compris la fenêtre principale de l'application, est masqué. D'une part, c'est même logique - ce qui est écrit est fait. Mais d'un autre côté, cela ressemble à un comportement non documenté et, il me semble, à un gros trou comme ça.
Je pourrais encore accepter le fait que si de telles astuces ne pouvaient être tournées qu'avec les propriétés qui affectent l'apparence, mais cela peut être fait avec toutes les propriétés !
Par exemple, en ajoutant au code que d'autres projets utilisent comme bibliothèque tierce, voici une ligne qui est parfois appelée à un moment aléatoire:
UITableView.appearance().delegate = nil
Vous pouvez réinitialiser tous les délégués à toutes les tables qui apparaissent à l'écran après l'exécution de ce code.
Les développeurs auront beaucoup de plaisir à essayer de comprendre ce qui s'est passé! Vous pouvez sûrement trouver quelque chose d'encore plus amusant!
J'espère vraiment que de telles choses ne sont pas passées inaperçues par Apple (je n'ai trouvé aucune information sur ce sujet), et des astuces similaires sont révélées quelque part au stade de la vérification d'assemblage automatique dans AppstoreConnect. Mais pour être honnête, je n'ai pas envie de vérifier.
De telles choses les gars. Je serai heureux de discuter si quelqu'un s'intéresse également au sujet.
PS Rends-moi mon 2011!