50 votes

Existe-t-il une manière "correcte" de faire en sorte que NSTextFieldCell dessine du texte centré verticalement ?

J'ai un NSTableView avec plusieurs colonnes de texte. Par défaut, les dataCell pour ces colonnes est une instance de l'application Apple NSTextFieldCell qui fait toutes sortes de choses merveilleuses, mais qui dessine du texte aligné sur le haut de la cellule, alors que je veux que le texte soit centré verticalement dans la cellule.

Il existe un drapeau interne dans NSTextFieldCell qui peut être utilisé pour centrer verticalement le texte, et cela fonctionne à merveille. Cependant, comme il s'agit d'un indicateur interne, son utilisation n'est pas sanctionnée par Apple et il pourrait tout simplement disparaître sans avertissement dans une prochaine version. J'utilise actuellement ce drapeau interne parce qu'il est simple et efficace. Apple a manifestement consacré du temps à la mise en œuvre de cette fonctionnalité, et je n'aime pas l'idée de la réimplémenter.

Donc, ma question est la suivante : Quelle est la bonne façon d'implémenter quelque chose qui se comporte exactement comme le NStextFieldCell d'Apple, mais qui dessine du texte centré verticalement au lieu d'être aligné en haut ?

Pour mémoire, voici ma "solution" actuelle :

@interface NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical;
@end

@implementation NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical
{
    @try { _cFlags.vCentered = centerVertical ? 1 : 0; }
    @catch(...) { NSLog(@"*** unable to set vertical centering"); }
}
@end

Utilisé comme suit :

[[myTableColumn dataCell] setVerticalCentering:YES];

1voto

AllezLesBleus Points 46

J'ai eu le même problème et voici la solution que j'ai trouvée :

1) Dans Interface Builder, sélectionnez votre NSTableCellView. Assurez-vous que sa taille est égale à la hauteur de la ligne dans l'inspecteur de taille. Par exemple, si la hauteur de votre ligne est de 32, la hauteur de votre cellule sera de 32.

2) Assurez-vous que votre cellule est bien placée dans votre ligne (je veux dire visible).

3) Sélectionnez votre TextField dans votre cellule et allez dans votre inspecteur de taille.

4) Vous devriez voir l'élément "Arrangement" et sélectionner "Centrer verticalement dans le conteneur".

--> Le champ de texte se centre dans la cellule.

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