Mise en surbrillance personnalisée NSCell
Question
J'essaie de sous-classer NSCell
pour dessiner un surlignage d'arrière-plan personnalisé.La documentation semble suggérer que la priorité highlight:withFrame:inView:
devrait me permettre de le faire mais la méthode n'est jamais appelée.
Au lieu de cela, j'ai remplacé drawInteriorWithFrame:inView:
ce qui fonctionne bien - je peux dessiner ce que je veux dans la cellule.Cependant, le problème est que je dois tout dessiner moi-même, perdant ainsi la fonctionnalité du type de NSCell que j'étends - par exemple la capacité d'un NSTextFieldCell à afficher du texte :
Cellule en surbrillance dessinée sur mesure :
Cependant, je souhaite simplement redessiner l'arrière-plan (le surbrillance) et conserver la possibilité d'utiliser la fonctionnalité principale de la cellule étendue :
Je pourrais bien sûr dessiner le texte moi-même aussi, mais j'espère qu'il existe un moyen plus simple de procéder.
Toute aide est très appréciée.
La solution
Grâce à l'aide de @Bavarous, j'ai réussi à résoudre le problème.Mon implémentation de classe NSTextFieldCell étendue contient désormais :
-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
return nil;
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
if ([self isHighlighted]) {
// Draw highlight background here
}
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
La clé est de vous assurer de revenir nil
pour highlightColorWithFrame:inView:
arrêter drawInteriorWithFrame:inView:
dessiner un arrière-plan tout en l'appelant pour dessiner le contenu principal (dans ce cas, le texte).