Pendekatan 1:
Ini dilakukan dengan menambahkan aksesori batang judul. Saya bisa menyelesaikan ini dengan memodifikasi file AppDelegate.swift. Saya harus menerapkan beberapa bantalan aneh agar terlihat benar.
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(""))
}
}
Hasil:
Pendekatan 2 (Metode alternatif):
Idenya di sini adalah melakukan bagian toolbar menggunakan storyboard dan aplikasi lainnya menggunakan SwiftUI. Ini dilakukan dengan membuat aplikasi baru dengan storyboard sebagai antarmuka pengguna. Lalu pergi ke storyboard dan hapus View Controller default dan tambahkan yang baru NSHostingController
. Hubungkan Pengendali Hosting yang baru ditambahkan ke jendela utama dengan mengatur hubungannya. Tambahkan toolbar Anda ke jendela menggunakan pembangun antarmuka.
Lampirkan kelas khusus ke Anda NSHostingController
dan muat tampilan SwiftUI Anda ke dalamnya.
Contoh kode di bawah ini:
import Cocoa
import SwiftUI
class HostingController: NSHostingController<SwiftUIView> {
@objc required dynamic init?(coder: NSCoder) {
super.init(coder: coder, rootView: SwiftUIView())
}
}
Menggunakan pendekatan ini juga memberi Anda kemampuan untuk menyesuaikan toolbar.