Підхід 1:
Це робиться шляхом додавання аксесуара до рядка заголовка. Мені вдалося це зробити, змінивши файл AppDelegate.swift. Мені довелося застосувати якісь дивні накладки, щоб це виглядало правильно.
AppDelegate.swift
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
// Create the titlebar accessory
let titlebarAccessoryView = TitlebarAccessory().padding([.top, .leading, .trailing], 16.0).padding(.bottom,-8.0).edgesIgnoringSafeArea(.top)
let accessoryHostingView = NSHostingView(rootView:titlebarAccessoryView)
accessoryHostingView.frame.size = accessoryHostingView.fittingSize
let titlebarAccessory = NSTitlebarAccessoryViewController()
titlebarAccessory.view = accessoryHostingView
// Create the window and set the content view.
window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
window.center()
window.setFrameAutosaveName("Main Window")
// Add the titlebar accessory
window.addTitlebarAccessoryViewController(titlebarAccessory)
window.contentView = NSHostingView(rootView: contentView)
window.makeKeyAndOrderFront(nil)
}
TitlebarAccessory.swift
import SwiftUI
struct TitlebarAccessory: View {
var body: some View {
TextField("Placeholder", text: .constant(""))
}
}
Результат:
Підхід 2 (альтернативний метод):
Ідея тут полягає в тому, щоб зробити частину панелі інструментів за допомогою раскадровки та решти програми за допомогою SwiftUI. Це робиться шляхом створення нового додатка з розкадровкою як користувальницького інтерфейсу. Потім перейдіть до таблиці та видаліть контролер перегляду за замовчуванням та додайте новий NSHostingController
. Підключіть щойно доданий хостинг-контролер до головного вікна, встановивши його зв'язок. Додайте панель інструментів до вікна за допомогою програми для створення інтерфейсів.
Приєднайте до себе спеціальний клас NSHostingController
і завантажте в нього свій погляд SwiftUI.
Приклад нижче:
import Cocoa
import SwiftUI
class HostingController: NSHostingController<SwiftUIView> {
@objc required dynamic init?(coder: NSCoder) {
super.init(coder: coder, rootView: SwiftUIView())
}
}
Використання цього підходу також дає можливість налаштувати панель інструментів.