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 :

enter image description here

Cependant, je souhaite simplement redessiner l'arrière-plan (le surbrillance) et conserver la possibilité d'utiliser la fonctionnalité principale de la cellule étendue :

enter image description here

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.

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top