Создание окна в окне в macOS с помощью SwiftUI
«`swift
struct WindowInView: View {
var body: some View {
// Корневое представление
ZStack {
Text(«Корневое представление»)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.green)
// Внутреннее представление
WindowGroup {
Text(«Внутреннее представление»)
.frame(width: 200, height: 200)
.background(Color.red)
}
.frame(width: 200, height: 200)
.position(x: 100, y: 100)
}
}
}
«`
Примечания:
WindowGroup: создает внутреннее представление как отдельное окно, которое будет отображаться в корневом представлении.
.frame: задает размер и положение внутреннего окна.
.position: определяет положение внутреннего окна в корневом представлении.
Запуск приложения:
Откройте Xcode и создайте новый проект SwiftUI.
Вставьте приведенный выше код в файл ContentView.swift.
Соберите и запустите приложение.
Вы увидите главное окно приложения с зеленым фоном. Внутри него будет находиться меньшее красное окно, которое можно перемещать и изменять размер.
Доступ к внутреннему окну из SwiftUI
Чтобы получить доступ к внутреннему окну из SwiftUI, можно использовать API NSWindow:
«`swift
struct WindowInView: View {
@State var innerWindow: NSWindow?
var body: some View {
ZStack {
// Корневое представление
WindowGroup {
Text(«Внутреннее представление»)
.frame(width: 200, height: 200)
.background(Color.red)
.onAppear {
// Получение ссылки на внутреннее окно
self.innerWindow = NSApp.keyWindow!
}
}
.frame(width: 200, height: 200)
.position(x: 100, y: 100)
}
}
}
«`