Comment puis-je souligner manuellement un NSPopUpButtonCell en dessinant (dessiner en utilisant blanc au lieu de noir)?
-
18-09-2019 - |
Question
J'ai une cellule personnalisée composée de plusieurs cellules, dont un est un NSPopUpButtonCell.
Lors de l'élaboration de ma cellule personnalisée en surbrillance, je veux faire toutes les sous-cellules pour mettre en évidence aussi bien (généralement en tournant blanc).
Avec, par exemple un NSTextCell, si je l'appelle setHighlighted:YES
avant d'appeler drawWithFrame:inView
la cellule sera tirée avec du texte blanc, exactement comme je le veux.
Cela ne fonctionne pas avec NSPopUpButtonCells. Le texte continue de dessiner en noir.
Il semble que cela devrait être possible, car une chute NSPopUpButtonCell dans un NSTableView met en évidence correctement.
Quelqu'un peut-il me diriger dans la bonne direction pour fixer cela?
La solution
Où êtes-vous accueillez cette coutume + sous-classe composite NSCell?
-setHighlighted: OUI est pas ce que vous recherchez. De la documentation:
Par défaut, cette méthode ne fait rien. La classe NSButtonCell remplace cette Procédé pour dessiner le bouton avec le apparence spécifiée par NSCellLightsByBackground, NSCellLightsByContents, ou NSCellLightsByGray.
En général, la vue hôte pour une cellule attribuer le style d'arrière-plan de la cellule, et la cellule utilisera au temps du tirage au sort pour s'afficher correctement. Propager le style d'arrière-plan de la cellule maître aux sous-cellules.
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSRect textRect, popUpRect;
NSDivideRect(cellFrame, &textRect, &popUpRect, NSWidth(cellFrame) / 2, NSMinXEdge);
/* Draw the text cell (self) */
[super drawInteriorWithFrame: textRect inView: controlView];
/* Draw our compound popup cell - create & release every time drawn only in example */
NSPopUpButtonCell *popUpCell = [[NSPopUpButtonCell alloc] initTextCell: @"popup title"];
[popUpCell setBordered: NO];
[popUpCell setBackgroundStyle: [self backgroundStyle]];
[popUpCell drawWithFrame: popUpRect inView: controlView];
[popUpCell release];
}
Si vous accueillez cette cellule composite dans un NSTableView, cela devrait être suffisant pour obtenir l'arrière-plan correct pour les lignes sélectionnées.
Si vous hébergez dans votre propre point de vue, vous devrez peut-être faire un travail supplémentaire. (Et la nécessité de fournir des détails supplémentaires sur l'environnement hôte avant de pouvoir offrir des conseils.)