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

结果: