xcode - 在系统范围内向 Mac 窗口标题栏添加按钮

标签 xcode macos cocoa button

我希望能够向 title bar 添加一个按钮在 Mac 上打开的所有窗口

该按钮位于右侧,与 X - + 按钮相对。

此处询问有关我的应用程序的窗口:
How can I create Yosemite-style unified toolbar in Interface Builder?

但我希望该按钮出现在 Mac 上打开的任何应用程序的所有窗口上。显然,只有在用户安装了该程序后才会发生这种情况。

我知道这本质上是“插入”操作系统的 UI,但我看到其他应用程序这样做,这让我觉得这是可行的。

这是我想要按钮的屏幕截图:

Screenshot

最佳答案

在 OS X 10.10 (Yosemite) 及更高版本中添加标题栏按钮的官方支持方法是创建 NSTitlebarAccessoryViewController并使用 -[NSWindow addTitlebarAccessoryViewController] 将其添加到您的窗口中.

例如,我有一个带有标题栏附件 View 的窗口:

demo window title bar

为了进行设置,我首先向 Storyboard中的窗口 Controller 场景添加一个独立 View 。 (您不必使用 Storyboard,但我在这个项目中使用了。)

accessory view

我的附件 View 是一个带有 NSButton subview 的 NSView 。按钮标题使用 Font Awesome 来显示图钉。

我将附件 View 连接到我的 NSWindowController 子类中的 socket (巧妙地命名为 accessoryView):

outlet connection

然后,在窗口 Controller 的 windowDidLoad 中,创建 NSTitlebarAccessoryViewController,设置其属性,并将其添加到窗口:

@IBOutlet var accessoryView: NSView!
var accessoryViewController: NSTitlebarAccessoryViewController?

override func windowDidLoad() {
    super.windowDidLoad()
    createAccessoryViewControllerIfNeeded()
}

fileprivate func createAccessoryViewControllerIfNeeded() {
    guard self.accessoryViewController == nil else { return }
    let accessoryViewController = NSTitlebarAccessoryViewController()
    self.accessoryViewController = accessoryViewController
    accessoryViewController.view = accessoryView
    accessoryViewController.layoutAttribute = .right
    self.window?.addTitlebarAccessoryViewController(accessoryViewController)
}

关于xcode - 在系统范围内向 Mac 窗口标题栏添加按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9955676/

相关文章:

java - Java内置字体和第三方字体有什么区别?

objective-c - 为什么 Flash 嵌入在 Cocoa WebView 中显示为 "Missing Plug-In"?

ios - 查找当前位置与另一个位置之间的距离 (Swift 5)

iphone - 使用导航栏在 IB 中设计 View ?

ios - VTDecompressionSessionDecodeFrame 返回 imageBuffer = nil 但 OSStatus = noErr

macos - Cocoa MacOS - 记录麦克风输入并保存为 mp3 的最简单方法

objective-c - 如何在 Mac 的 Objective-C (Cocoa) 应用程序中使用 GCrypt?

cocoa - 请帮忙使用 CGBitmapContext 和 16 位图像

ios - 添加 libz.1.2.3.dylib 与 libz.1.1.3.dylib 或 libz.1.2.5.dylib

json - iOS 14 中的通用链接 apple-app-site-association 文件