On dirait que UITextAlignmentCenter
est déprécié dans iOS 6.
Je l'utilise toujours et il fonctionne bien, mais il donne un avertissement.
Comment puis-je réparer cela ?
label.textAlignment = UITextAlignmentCenter;
Merci.
On dirait que UITextAlignmentCenter
est déprécié dans iOS 6.
Je l'utilise toujours et il fonctionne bien, mais il donne un avertissement.
Comment puis-je réparer cela ?
label.textAlignment = UITextAlignmentCenter;
Merci.
Il est possible que l'enum puisse changer à un moment donné dans le futur et provoquer des résultats inattendus. C'est tout. Pas de scénario catastrophe dans ce cas, mais de meilleures pratiques devraient prévaloir.
Majorl3oat : Ce n'est PAS une bonne pratique d'utiliser un nombre constant au lieu d'un enum. L'enum aide à la lisibilité du code, ce qui est un facteur extrêmement important. Le fait qu'il puisse être cassé à l'avenir n'est qu'une mauvaise conception de la part d'Apple, et s'ils le cassent, je préfère avoir des erreurs de compilation plutôt que de risquer que l'alignement soit mauvais sans que je m'en aperçoive.
Robin a tout à fait raison. L'utilisation d'un enum est la meilleure pratique, sans aucun doute. Vous pouvez TOUJOURS supposer que NSTextAlignmentCenter signifie CENTER, vous ne pouvez en AUCUN cas supposer que 1 signifie toujours CENTER. À moins qu'Apple ne soit complètement fou.
El labelAlignment
est probablement lié à l'introduction par Apple de NSAttributedStrings dans un plus grand nombre de contrôles iOS, et donc à la nécessité de remplacer les propriétés UIText par des propriétés NSText .
Donc, si vous avez mis à jour vers iOS6, vous êtes dans la trèfle ; il suffit de passer de UITextAlignmentCenter
a NSTextAlignmentCenter
et profiter des nouvelles cordes fantaisie.
Mais si vous travaillez sur un projet complexe et que vous préférez que la terre ne bouge pas tant que ça sous vos pieds, il est préférable de s'en tenir à une version plus ancienne pendant un certain temps et d'adapter votre code à plusieurs versions, comme ceci :
// This won't compile:
if ([label respondsToSelector:@selector(attributedText:)])
label.textAlignment = UITextAlignmentCenter;
else
label.textAlignment = NSTextAlignmentCenter;
L'approche ci-dessus fonctionne pour les nouvelles méthodes ; vous obtenez des avertissements mais tout fonctionne bien. Mais quand le compilateur voit un constant qu'il ne connaît pas, il devient rouge et s'arrête dans sa course. Il n'y a aucun moyen de se faufiler NSTextAlignmentCenter
le dépasser. (Il pourrait y avoir un moyen de personnaliser le comportement du compilateur ici, mais cela semble déconseillé).
La solution consiste à ajouter des définitions conditionnelles dans le préprocesseur. Si vous mettez quelque chose comme ceci dans le fichier h de votre classe (ou peut-être dans un fichier de constantes importé -- qui doit lui-même inclure #import <UIKit/UIKit.h>
pour pouvoir connaître les constantes NSText...)...
#ifdef NSTextAlignmentCenter // iOS6 and later
# define kLabelAlignmentCenter NSTextAlignmentCenter
# define kLabelAlignmentLeft NSTextAlignmentLeft
# define kLabelAlignmentRight NSTextAlignmentRight
# define kLabelTruncationTail NSLineBreakByTruncatingTail
# define kLabelTruncationMiddle NSLineBreakByTruncatingMiddle
#else // older versions
# define kLabelAlignmentCenter UITextAlignmentCenter
# define kLabelAlignmentLeft UITextAlignmentLeft
# define kLabelAlignmentRight UITextAlignmentRight
# define kLabelTruncationTail UILineBreakModeTailTruncation
# define kLabelTruncationMiddle UILineBreakModeMiddleTruncation
#endif
vous pouvez le faire :
label.textAlignment = kLabelAlignmentCenter;
Et ceci :
label.lineBreakMode = kLabelTruncationMiddle;
Etc.
Comme ces modifications UIText/NSText sont susceptibles d'apparaître pour plusieurs contrôles, cette approche est très pratique.
(Mise en garde : faisant partie des amoureux de la terre ferme mentionnés plus haut, j'ai testé ceci avec une ancienne version, mais pas encore avec iOS6).
NSTextAlignmentCenter
peut être utilisé à la place de UITextAlignmentCenter
et une liste d'autres remplacements est ci-dessous :
#ifdef __IPHONE_6_0 // iOS6 and later
# define UITextAlignmentCenter NSTextAlignmentCenter
# define UITextAlignmentLeft NSTextAlignmentLeft
# define UITextAlignmentRight NSTextAlignmentRight
# define UILineBreakModeTailTruncation NSLineBreakByTruncatingTail
# define UILineBreakModeMiddleTruncation NSLineBreakByTruncatingMiddle
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0)
# define ALIGN_CENTER NSTextAlignmentCenter
#else
# define ALIGN_CENTER UITextAlignmentCenter
#endif
UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
label.text = @"There is no spoon";
label.textAlignment = ALIGN_CENTER;
[self addSubview:label];
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.
7 votes
Une supposition éclairée :
NSTextAlignment
.1 votes
Utilisez NSTextAlignment à la place.