NSButton Toggle : OnClick title get removed on OSX 10.11

117 views Asked by At

I am using a Toggle button in XIB,

in AwakeFromNib :I set title and BG image of the button. Code works very well till OSX 10.10.5 and below but on higher versions when I click on button the text gets removed.

Set attributed Title

    [self.deleteButton setWantsLayer:YES];
    self.deleteButton.layer.backgroundColor = [self setButtonBGColor];
    [self setButtonTitleFor:self.deleteButton
                   toString:@"Delete"];
    [self.deleteButton setLayerContentsRedrawPolicy:NSViewLayerContentsRedrawOnSetNeedsDisplay];



- (void)setButtonTitleFor:(NSButton*)button toString:(NSString*)title
{
    NSAttributedString *attrString = [self getAttributedStringForString:title];
    [button setAttributedTitle:attrString];
}

enter image description here enter image description here

Any idea hat should be done.

enter image description here

1

There are 1 answers

0
Swati On BEST ANSWER

So finally got it right

Subclassing NSButtonCell helped me out

RPButtonTextTopCell.h

@interface RPButtonTextTopCell : NSButtonCell

@end

RPButtonTextTopCell.m

@implementation RPButtonTextTopCell

-(id) init
{
    self = [super init];
    if (self) {
    }
    return self;
}

-(id) initWithCoder:(NSCoder *)decoder
{
    return [super initWithCoder:decoder];
}

-(id) initTextCell:(NSString *)string
{
    return [super initTextCell:string];
}

-(NSRect)titleRectForBounds:(NSRect)theRect
{
    NSRect titleFrame = [super titleRectForBounds:theRect];
    NSSize titleSize = [[self attributedStringValue] size];

    titleFrame.origin.y = (theRect.origin.y - (theRect.size.height-titleSize.height)*0.5) + 5;

    return titleFrame;
}

@end

Utilizing This Custom Class

RPButtonTextTopCell *deleteCell = [[RPButtonTextTopCell alloc] init];
deleteCell.backgroundColor      = [self setNSButtonBGColor];

[self.deleteButton setCell:deleteCell];
[self setButtonTitleFor:self.deleteButton
               toString:@"Delete"];
[self.deleteButton setAction:@selector(deleteButtonClicked:)];
[self.deleteButton setTarget:self];

and its solved....