Swift Cocoa 操纵标题栏按钮的设计
Swift Cocoa manipulate design of titlebar buttons
我目前正在使用 XCode 12.3 和 Swift 5 开发 Swift/Cocoa 应用程序。
我想操纵 NSWindow 标题栏中关闭按钮的设计。
我已经尝试使用
更改设计
self.window?.standardWindowButton(.closeButton)?.layer. ... = ...
但这种方法似乎不起作用 - 至少对我而言。您对如何实现它有任何想法吗?
您需要将 wantsLayer
设置为 true
。标准 window 按钮是带有 NSCell
的常规 NSButton
按钮。要自定义并且不让原始按钮阻挡视图,您需要删除单元格并使用层或只创建一个自定义层。
请注意,当移除或设置您自己的按钮单元时,其操作选择器将重置,因此您需要确保按钮仍按您希望的方式执行。
这是 Objective C 中的代码,但应该很容易翻译成 Swift:
NSButton *button = [self standardWindowButton:NSWindowCloseButton];
button.wantsLayer = YES;
button.layer.backgroundColor = NSColor.greenColor.CGColor;
NSCell *cell = [[NSCell alloc] initTextCell:@"?"];
[button setCell:cell];
结果:
我目前正在使用 XCode 12.3 和 Swift 5 开发 Swift/Cocoa 应用程序。
我想操纵 NSWindow 标题栏中关闭按钮的设计。
我已经尝试使用
更改设计self.window?.standardWindowButton(.closeButton)?.layer. ... = ...
但这种方法似乎不起作用 - 至少对我而言。您对如何实现它有任何想法吗?
您需要将 wantsLayer
设置为 true
。标准 window 按钮是带有 NSCell
的常规 NSButton
按钮。要自定义并且不让原始按钮阻挡视图,您需要删除单元格并使用层或只创建一个自定义层。
请注意,当移除或设置您自己的按钮单元时,其操作选择器将重置,因此您需要确保按钮仍按您希望的方式执行。
这是 Objective C 中的代码,但应该很容易翻译成 Swift:
NSButton *button = [self standardWindowButton:NSWindowCloseButton];
button.wantsLayer = YES;
button.layer.backgroundColor = NSColor.greenColor.CGColor;
NSCell *cell = [[NSCell alloc] initTextCell:@"?"];
[button setCell:cell];
结果: