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:

enter image description here

Tuttavia, voglio solo ridisegnare lo sfondo (evidenziare), e mantengono la capacità di utilizzare le principali funzionalità dell'estensione della cella:

enter image description here

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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top