iOS: Utilisation de UIAppearance à définir des UITableViewCell couleur
Si j'ai mis le backgroundColor attribut sur un groupe de UITableViewCell, la couleur d'arrière-plan avec succès des changements. Grand.
Mais je voudrais utiliser UIAppearance pour changer la couleur d'arrière-plan sur toutes mes UITableViewCells, alors je peux le faire en un seul endroit et affecter un changement partout. Voici mon code:
[[UITableViewCell appearance] setBackgroundColor:[UIColor colorWithRed:30.0/255.0 green:30.0/255.0 blue:30.0/255.0 alpha:1.0]];
UITableViewCell implémente UIAppearance et UIAppearanceContainer, donc j'aurais pensé que ce serait le travail. Mais il ne le fait pas. J'ai aussi essayé d'utiliser -[UITableViewCell appearanceWhenContainedIn:(Class)]
, et que cela ne fonctionne pas.
Des idées?
Vous devez vous connecter pour publier un commentaire.
Mise à jour (2013/7/8) - Cela a été corrigé dans les versions plus récentes d'iOS. Cependant, il est intéressant de savoir à propos si vous ciblez iOS 6 ou au-dessous.
Vous pouvez blâmer Apple pour celui-ci, et c'est en fait assez dire d'eux. Techniquement,
backgroundColor
n'est pas personnalisable par le biais de l'apparence des procurations.De la documentation d'Apple:
Si nous entrons dans une classe comme
UIBarButtonItem
et de regarder latintColor
propriété, nous voyons ceci:Ainsi parce que c'est marqué avec le
UI_APPEARANCE_SELECTOR
tag nous savons qu'il fonctionne avecUIAppearance
.Voici où Apple sont particulièrement veux dire: dans un
UIView
,backgroundColor
a aucune apparence sélecteur de balise, mais fonctionne encore avecUIAppearance
. Selon l'ensemble de la documentation Apple fournir, il ne devrait pas, mais encore il ne!Cela donne l'impression trompeuse qu'il va travailler pour tous les sous-classes de
UIView
, y comprisUITableView
. Cela est venu avant, dans cette précédente AFIN de répondre àDe sorte que la ligne de fond est que
backgroundColor
ne fonctionne pas du tout avecUIAppearance
, mais pour quelque raison il ne le fait sur unUIView
. Il n'est pas garanti pour fonctionner surUIView
sous-classes, et il ne fonctionne pas du tout surUITableView
. Désolé je ne pourrais pas vous donner plus d'une réponse positive!setBackgroundColor
dans un code de démonstration une fois sur l'apparence des procurations.UITableViewCell
fichier d'en-tête?Vous pouvez créer votre propre sous-classe de UITableViewCell qui est conforme à UIAppearance et marque une coutume setter avec UI_APPEARANCE_SELECTOR. Ensuite, réglez la cellule backgroundColor sur le superlass à partir de votre personnalisé setter .
Dans votre appDelegate
Dans votre UItableView sous-classe
Je suis en utilisant l'ARC dans cet exemple.
UIPrintInteractionController
par exemple).Sans Sous-Classement! Faire cela sur une sous-classe est probablement PAS la meilleure pratique, surtout si vous voulez frapper tous les tableView origines. C'est beaucoup de sous-classement. Beaucoup de bugs potentiels. Un gâchis vraiment. La meilleure façon de le faire est d'utiliser une catégorie. Vous devrez en créer un pour le tableViewCell et la tableView. Je viens de démontrer l'une pour la cellule. La propriété sur la tableView vous devez faire est de la propriété backgroundColor. NB. Je suis ajoutant mes méthodes, avec "sam".
//.h
//.m
Maintenant dans votre appDelegate ou certains gestionnaire de classe vous allez importer la catégorie et viens de l'appeler comme si elle avait une apparence de proxy intégré.
Ok, alors maintenant, il suffit de faire la une de la tableView du fond de la propriété. Simple.
J'ai utilisé pour cette catégorie. Ci-dessous l'exemple de code
Dans votre .h l'écriture des fichiers
Dans votre .m ecrire fichier
Il a bien fonctionné pour moi. 🙂
Merci Nate!!!