我希望能够在Mac上打开的所有窗口都添加一个按钮(它将放在右侧,与#34; X"""" #34; +"按钮)。我相信我想添加按钮的区域称为标题栏,虽然我对此不太确定。
我似乎无法在界面构建器中找到一种方法。但即使我这样做,我希望按钮出现在Mac上打开的所有窗口上(显然一旦用户安装了这个程序)。
据我所知,这基本上是"插入"操作系统的用户界面,但我看到其他应用程序这样做,这让我觉得它是可行的。
只是寻找一些指示,我可以阅读它,代码片段和一般建议,我会采取任何措施。
以下是我想要按钮的屏幕截图:
答案 0 :(得分:11)
官方支持的在OS X 10.10(Yosemite)中添加标题栏按钮的方法是创建NSTitlebarAccessoryViewController
并使用-[NSWindow addTitlebarAccessoryViewController]
将其添加到您的窗口。
例如,我有一个带标题栏配件视图的窗口:
要进行此设置,我首先在故事板中向窗口控制器场景添加一个独立视图。 (你不必使用故事板,但我在这个项目中做过。)
我的附件视图是带有NSView
子视图的NSButton
。按钮标题使用Font Awesome来显示图钉。
我将附件视图连接到我的accessoryView
子类中的插座(巧妙地命名为NSWindowController
):
然后,在我的窗口控制器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)
}
答案 1 :(得分:7)
答案 2 :(得分:6)
这实际上是一个由两部分组成的问题。至于如何获得按钮,我建议使用-[NSWindow standardWindowButton:]
来获取现有的窗口按钮及其超级视图(即标题栏):
NSButton *closeButton = [window standardWindowButton:NSWindowCloseButton]; // Get the existing close button of the window. Check documentation for the other window buttons.
NSView *titleBarView = closeButton.superview; // Get the view that encloses that standard window buttons.
NSButton *myButton = …; // Create custom button to be added to the title bar.
myButton.frame = …; // Set the appropriate frame for your button. Use titleBarView.bounds to determine the bounding rect of the view that encloses the standard window buttons.
[titleBarView addSubview:myButton]; // Add the custom button to the title bar.
插件可能最容易作为SIMBL插件。
答案 3 :(得分:0)
快速4-在NSWindowController
中添加以下代码
if let window = window {
let myButton = NSButton()
myButton.title = "Help"
myButton.bezelStyle = .rounded
let titleBarView = window.standardWindowButton(.closeButton)!.superview!
titleBarView.addSubview(myButton)
myButton.translatesAutoresizingMaskIntoConstraints = false
titleBarView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[myButton]-2-|", options: [], metrics: nil, views: ["myButton": myButton]))
titleBarView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-1-[myButton]-3-|", options: [], metrics: nil, views: ["myButton": myButton]))
}
希望这会有所帮助。