NSCell Personalizzato Evidenziare
Domanda
Sto cercando di creare una sottoclasse NSCell
per disegnare uno sfondo personalizzato evidenziare.La documentazione sembra suggerire che l'override highlight:withFrame:inView:
dovrebbe consentire a me di fare questo, ma il metodo non viene mai chiamato.
Invece, ho sovrascritto drawInteriorWithFrame:inView:
che funziona bene - sono in grado di disegnare quello che voglio nella cella.Tuttavia, il problema è che devo disegnare tutto me stesso, di perdere la funzionalità del tipo di NSCell sto estendendo, ad esempio un NSTextFieldCell la possibilità di visualizzare il testo:
Personalizzato redatto cella evidenziata:
Tuttavia, voglio solo ridisegnare lo sfondo (evidenziare), e mantengono la capacità di utilizzare le principali funzionalità dell'estensione della cella:
Potrei, naturalmente, solo di disegnare il testo anche per me stesso, ma sto sperando che ci sia un modo più semplice di fare questo.
Qualsiasi aiuto è molto apprezzato.
Soluzione
Grazie all'aiuto di @Bavarious sono riuscito a lavorare fuori.Il mio estesa NSTextFieldCell implementazione della classe, che ora contiene:
-(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 chiave è quello di assicurarsi di ritorno nil
per highlightColorWithFrame:inView:
per interrompere drawInteriorWithFrame:inView:
disegno di sfondo e di sicurezza ancora chiamando per disegnare il contenuto principale (in questo caso, il testo).