Como faço para destacar manualmente um NSpopupButtonCell ao desenhá -lo (desenhe -o usando branco em vez de preto)?

StackOverflow https://stackoverflow.com/questions/1162414

Pergunta

Eu tenho uma célula personalizada composta por várias células, uma das quais é uma NSPOPUPBTTONCELL.

Ao destacar minha célula personalizada, quero fazer com que todas as sub-células também destacem (normalmente ficando branco).

Com, por exemplo, um nstextcell, se eu ligar setHighlighted:YES antes de ligar drawWithFrame:inView A célula será desenhada com o texto em branco, exatamente como eu quero.

Isso não funciona com o NSPOPUPBUTONCELLS. O texto continua a desenhar como preto.

Parece que isso deve ser possível, já que lançar um NSPOPUPBUTTONCELL em um destaque nStableView corretamente.

Alguém pode me apontar na direção certa para consertar isso?

Foi útil?

Solução

Onde você está hospedando esta subclasse NSCELL Custom+composta?

-Tethlighted: Sim, não é o que você está procurando. Da documentação:

Por padrão, esse método não faz nada. A classe NSButtonCell substitui esse método para desenhar o botão com a aparência especificada pelo NSCellLightsbybackground, NSCellLightsByContents ou NSCellLightsbygray.

Normalmente, a visualização do host para uma célula define o estilo de fundo da célula, e a célula usará isso no tempo de desenho para se exibir adequadamente. Propagar o estilo de fundo da célula mestre para as sub-células.

- (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];
}

Se você estiver hospedando esta célula composta em um NSTableView, isso deve ser suficiente para obter o plano de fundo correto para linhas selecionadas.

Se você estiver hospedando isso na sua opinião, pode ser necessário fazer um trabalho adicional. (E precisa fornecer detalhes adicionais sobre o ambiente do host antes que possamos oferecer conselhos.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top