2016-12-30 2 views
0

Я использую кнопку Переключить в XIB,NSButton Переключение: OnClick название удаляются на OSX 10.11

в AwakeFromNib: Я установил название и BG изображение кнопки. Код работает очень хорошо до OSX 10.10.5 и ниже, но на более высокие версии при нажатии кнопки текст удаляется.

Набор приписывал Название

[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

Любой идею шляпа должна быть сделана.

enter image description here

+0

Может ли кто-нибудь помочь? – Swati

ответ

0

Так, наконец, получил это право

подклассов NSButtonCell помог мне

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

Используя этот пользовательский класс

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

и ее решить ....