Domanda

Per qualche motivo, quando il mio pulsante è disabilitato, il colore del testo diventa bianco. Voglio che rimanga nero - come posso farlo?

È stato utile?

Soluzione

È possibile impostare testo, immagine, colori, caratteri, ecc. Per lo stato diverso di un pulsante: normale, evidenziato, disabilitato, ecc.

Puoi farlo in Interface Builder modificando lo stato con l'elenco a discesa.

Altri suggerimenti

È possibile sottoclasse NSButtonCell e sovrascrivere un metodo:

- (NSRect)drawTitle:(NSAttributedString *)title withFrame:(NSRect)frame inView:(NSView *)controlView
{
    if (![self isEnabled]) {
        return [super drawTitle:[self attributedTitle] withFrame:frame inView:controlView];
    }

    return [super drawTitle:title withFrame:frame inView:controlView];
}

In questo modo, quando il pulsante è disabilitato, il testo avrà lo stesso colore del testo quando il pulsante è abilitato.

Dai un'occhiata anche a questo

[btnInfo.cell setImageDimsWhenDisabled:NO];

Puoi sovrascrivere un metodo privato in NSButtonCell:

- (BOOL)_textDimsWhenDisabled {
    return NO;
}

- (BOOL)_shouldDrawTextWithDisabledAppearance {
    return NO;
}

Ho riempito un radar per un metodo pubblico: rdar: // 19218619

In Mojave, qualsiasi sovraccarico dei metodi di sorteggio rende impossibile cambiare il colore di sfondo di NSButton quando evidenziato. Quindi preferirei consigliare di usare

- (BOOL)_shouldDrawTextWithDisabledAppearance

per questo scopo. Se stai usando Swift 4, farei quanto segue nell'intestazione del ponte:

#import <AppKit/AppKit.h>
@interface NSButtonCell (Private)
- (BOOL)_shouldDrawTextWithDisabledAppearance;
@end

E nella sottoclasse di NSButtonCell:

override func _shouldDrawTextWithDisabledAppearance() -> Bool {
    return false
}

Aggiornamento per Swift 4:

  override func drawTitle(_ title: NSAttributedString, withFrame frame: NSRect, in controlView: NSView) -> NSRect {

    if !self.isEnabled {
        return super.drawTitle(self.attributedTitle, withFrame: frame, in: controlView)
    }

    return super.drawTitle(title, withFrame: frame, in: controlView)
    }

Ciò renderà gli attributi di testo come quando il pulsante è abilitato.

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