以编程方式自定义 NSButton 样式 <OSX / Objective-C>

NSButton custom style programmatically <OSX / Objective-C>

我在设置按钮样式时遇到问题,我已经阅读了Apple文档,但我仍然不知道如何正确更改样式。

这是我的代码:

NSButton *loginBtn = [[NSButton alloc] initWithFrame:NSMakeRect(screenWidth / 2 - 155, screenHeight / 2 - 115, 300, 30)];
[loginBtn setCell:defaultButton];
[loginBtn setWantsLayer:YES];
[loginBtn setButtonType:NSButtonTypeMomentaryPushIn];
NSMutableAttributedString *buttonString = [[NSMutableAttributedString alloc] initWithString:@"Login" attributes:btnTextDictionary];
[loginBtn setAttributedTitle:buttonString];
[loginBtn setTarget:self];
[loginBtn setAction:@selector(loginActive)];
[loginView addSubview:loginBtn];

我尝试通过 RGB 更改背景颜色,但不起作用:

[loginBtn.layer setBackgroundColor:[NSColor colorWithCalibratedRed:35 / 255.0f green:216 / 255.0f blue:202 / 255.0f alpha:1.0f]CGColor];

如何使用 "OSX application project" 中的 objective-c 正确设置 BackgroundColor?

您不能通过设置图层背景来更改带边框的 NSButton 的颜色。在您的情况下,您可能需要设置 [loginBtn setBordered: NO];.

如果您想要一个更快、更通用的解决方案选项,我制作了一个名为 FlatButton 的方便的 NSButton 子类,让您可以直接从 Interface Builder 轻松创建样式按钮:

https://github.com/OskarGroth/FlatButton

虽然在Swift。

对于 Objective-C,这是 NSButton 的一个子 class,它为您提供了一个 setBackgroundColor 方法。

MyButton.h

#import <Cocoa/Cocoa.h>

@interface MyButton : NSButton
@property (nonatomic, strong) NSColor *backgroundColor;
@end

MyButton.m

#import "MyButton.h"

@implementation MyButton

- (void)setBackgroundColor:(NSColor *)backgroundColor {
    _backgroundColor = backgroundColor;
    [self setNeedsDisplay];
}

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];    
    [_backgroundColor setFill];
    NSRectFill(dirtyRect);
}

@end

在你的主要代码中你可以这样做:

#import "MyButton.h"

MyButton *loginBtn = [[MyButton alloc] initWithFrame:NSMakeRect(screenWidth / 2 - 155, screenHeight / 2 - 115, 300, 30)];
[loginBtn setBackgroundColor:[NSColor colorWithCalibratedRed:35 / 255.0f green:216 / 255.0f blue:202 / 255.0f alpha:1.0f]];