दृष्टिकोण 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 (वैकल्पिक विधि):
यहाँ विचार स्टोरीबोर्ड और शेष ऐप का उपयोग करके टूलबार भाग को स्विफ्टयूआई का उपयोग करना है। यह यूजर इंटरफेस के रूप में स्टोरीबोर्ड के साथ एक नया ऐप बनाकर किया जाता है। फिर स्टोरीबोर्ड पर जाएं और डिफ़ॉल्ट व्यू कंट्रोलर को हटाकर एक नया जोड़ें NSHostingController
। अपने रिश्ते को सेट करके नए जोड़े गए होस्टिंग कंट्रोलर को मुख्य विंडो से कनेक्ट करें। इंटरफ़ेस बिल्डर का उपयोग करके अपने टूलबार को विंडो में जोड़ें।
अपने लिए एक कस्टम क्लास अटैच करें NSHostingController
और उसमें अपना SwiftUI व्यू लोड करें।
नीचे दिए गए उदाहरण कोड:
import Cocoa
import SwiftUI
class HostingController: NSHostingController<SwiftUIView> {
@objc required dynamic init?(coder: NSCoder) {
super.init(coder: coder, rootView: SwiftUIView())
}
}
इस दृष्टिकोण का उपयोग करना आपको टूलबार को अनुकूलित करने की क्षमता भी देता है।