50 votes

iOS 5: curieux de connaître UIAppearance

Sur le tech talk 2011, j'ai vu un discours à propos de la nouvelle - UIAppearance protocole. Il n'y a pas beaucoup de documentation là-bas encore. Je vais brièvement résumer ce que je me souviens à expliquer d'où ma question qui est à venir à partir de:


À propos de UIAppearance:

Jusqu'à présent vous avez eu à personnaliser CHAQUE barre de navigation (barre d'outils, etc.) propriété dans toutes vos vue d'application des contrôleurs. Avec la nouvelle apparence de la propriété, vous pouvez le faire en un seul endroit pour toutes les barres de navigation dans votre application. Par exemple: si vous souhaitez personnaliser votre barre de Navigation de l'image de fond que vous pourriez faire comme ceci:

[[UINavigationBar appearance] setBackgroundImage:
   [UIImage imageNamed:@"MyImageName"] forBarMetrics:UIBarMetricsDefault]; 

Ceci permettra de définir l'image d'arrière-plan de TOUTES les barres de navigation au sein de votre application. Avec l' barMetrics vous spécifiez si vous voulez que l'image soit également utilisé en mode paysage ou pas.

Si vous souhaitez spécifier l'apparence doit être appliquée que dans certains contrôleurs de vue, il est également une méthode dans les docs de contrôle en indiquant vos objets sont situés:

[[UIBarButtonItem appearanceWhenContainedIn:
    [ABPeoplePickerNavigationController class], nil] setTintColor:myNavBarColor];

Également intéressant de mentionner est que, si vous avez unique personnalisé instances, à la différence de vos paramètres d'apparence, ces instances ne sera effectué par l'apparition de proxy.


Quelques questions:

a) Comment puis-je connaître les propriétés d'un travail en classe avec l'apparition de la propriété? Pour, par exemple, depuis UITableView conforme à la UIAppearance protocole, je pensais que je pouvais faire quelque chose comme

[[UITableView appearance] setBackgroundColor:mytableViewColor];

pour manipuler la couleur de fond de toutes mes vues de table, mais je ne peux pas!

b) Est-il une liste de toutes les classes qui sont manipulable avec l'apparition de la propriété?

c) À quel point l'apparence de personnalisation appelée? J'espérais apporter des modifications a jeté l'apparition de la propriété au moment de l'exécution, mais, malheureusement, les changements ne prennent pas de place.

36voto

Dave DeLong Points 156978

a) Comment puis-je savoir lequel des instances d'un travail en classe avec l'apparition de la propriété? Pour, par exemple, depuis UITableView est conforme à la UIAppearance protocole, je pensais que je pouvais faire quelque chose comme

Vous regardez dans l'en-tête de la classe (et les en-têtes de tous les super-classes). Toute méthode qui a UI_APPEARANCE_SELECTOR côté, c'est pris en charge pour une utilisation avec l' UIAppearance proxy.

[[UITableView appearance] setBackgroundColor:mytableViewColor];

L' backgroundColor de la propriété n'est pas décoré avec des UI_APPEARANCE_SELECTOR en UIView.h. Ainsi, il n'est techniquement pas pris en charge pour une utilisation avec l'apparition de proxy. Il sera probablement de travail, mais, étant donné le manque de méthode de décoration) n'est pas garantie.

De la UIAppearance Protocol Reference:

À l'appui de l'apparence de personnalisation, une classe doit être conforme à l' UIAppearanceContainer protocole et pertinentes aux méthodes d'accès doivent être marqués avec l' UI_APPEARANCE_SELECTOR.

(remarque "et pertinents méthodes d'accès doit être marqué..." [italiques ajoutés])


b) Est-il une liste de toutes les propriétés qui sont manipulable avec l'apparition de la propriété?

Est-il une seule page montrant tous les setter qui fonctionne avec l'apparition de proxy? Je n'en connais pas, ni est-il un moyen de construire la liste au moment de l'exécution.


c) À quel point l'apparence de personnalisation appelée? J'espérais apporter des modifications a jeté l'apparition de la propriété au moment de l'exécution, mais, malheureusement, les changements ne prennent pas de place.

Vous pouvez utiliser l'apparence procuration à tout moment au cours de l'exécution. Les changements ne seront pas appliqués à la vue jusqu'à ce que la prochaine fois que ces points de vue ont leur -layoutSubviews méthode invoquée.

3voto

Joshua Weinberg Points 22701

UIAppearance est documenté dans les en-têtes de chaque classe. Cherchez ici les méthodes marquées UI_APPEARANCE_SELECTOR à la toute fin. Ce sont les méthodes que vous pouvez appeler via le proxy d'apparence. Je ne suis pas au courant d'une liste en dehors des en-têtes.

La personnalisation de l'apparence est appelée immédiatement après le passage par le proxy, ainsi que chaque fois qu'un nouvel objet est construit. Mais cela ne fonctionnera que pour les méthodes marquées avec ce UI_APPEARANCE_SELECTOR

1voto

Alex Terente Points 9190

un: La ligne suivante

 [[UITableView appearance] setBackgroundColor:[UIColor blueColor]];

Faire de chaque vue de table bleu! Juste testé sur iOS 5 simulateur.

b: Le UIAppearance devrait fonctionner sur tous les biens sur un UIView. Toutes les sous-classes de UIView conforme UIAppearance Protocol

c: je pense que la plupart de la volonté de créer une classe et ou la méthode qui permettra de personnaliser l'apparence et de les appeler au:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Quelque chose comme: [ApplicationAppearance setApplicationSchemaTo:ASchemaBlue];

Edit:

Par exemple, UIBarButtonItem définit ces méthodes:

@property(nonatomic,retain) UIColor *nuance de couleur UI_APPEARANCE_SELECTOR;

De UIAppearanceContainer Protocole De Référence

Et dans le UIBarButtonItem de la Classe de Référence de la nuance de couleur est défini

@property(nonatomic, retain) UIColor *nuance de couleur

Mais dans le UIBarButtonItem.h est définie:

@property(nonatomic,retain) UIColor *tintColor __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;

Je pense que les docs ne sont pas à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X