Добавьте кнопки в окно Mac. Строки заголовка для всей системы.
Я хочу добавить кнопку в строку заголовка всех окон, которые открываются на Mac.
Кнопка пойдет с правой стороны, напротив кнопок X - +
.
Это спрашивается об окнах моего приложения здесь:
Как создать унифицированную панель инструментов в стиле Yosemite в Интерфейсном Разработчике?
Но я хочу, чтобы кнопка отображалась во всех окнах любого приложения, которые открыты на Mac. Очевидно, это произойдет только после того, как пользователь установит эту программу.
Я понимаю, что это, по сути, "подключение к" пользовательскому интерфейсу ОС, но я видел, как другие приложения делают это, и я чувствую, что это выполнимо.
Вот скриншот, где я хочу кнопку:
![Screenshot]()
Ответы
Ответ 1
Это действительно вопрос из двух частей. Что касается того, как получить кнопку там, Id предлагает использовать -[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.
Ответ 2
Официально поддерживаемый способ добавления кнопки заголовка в 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)
}
Ответ 3
Этот ответ обращается к последней Версии Xcode 9.3
- Перейти к раскадровке.
- Перетащите панель инструментов в раскадровке в окно.
![enter image description here]()
- Панель инструментов будет видна под заголовком.
![enter image description here]()
- Найдите окно на раскадровке
![enter image description here]()
- Отметьте "Скрыть заголовок" в свойствах окна.
![enter image description here]()
- Панель инструментов теперь является частью заголовка.
![enter image description here]()
Ответ 4
Swift 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]))
}
Надеюсь, это полезно.