以编程方式自定义 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]];
我在设置按钮样式时遇到问题,我已经阅读了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]];