Próbuję dodać pasek narzędzi wewnątrz paska tytułu do aplikacji macOS za pomocą SwiftUI, czegoś podobnego do tego, co pokazano poniżej.
Nie jestem w stanie znaleźć sposobu na osiągnięcie tego za pomocą SwiftUI. Obecnie mam pasek narzędzi (który ma tylko pole tekstowe) w moim widoku, ale chcę przenieść go do paska tytułu.
Mój obecny kod:
struct TestView: View {
var body: some View {
VStack {
TextField("Placeholder", text: .constant("")).padding()
Spacer()
}
}
}
Więc w moim przypadku muszę mieć pole tekstowe na pasku narzędzi.
macos
swiftui
macos-catalina
Bijoy Thangaraj
źródło
źródło
Odpowiedzi:
Podejście 1:
Odbywa się to poprzez dodanie akcesorium paska tytułu. Udało mi się to zrobić, modyfikując plik AppDelegate.swift. Musiałem zastosować jakieś dziwne wypełnienie, aby wyglądało dobrze.
AppDelegate.swift
TitlebarAccessory.swift
Wynik:
Podejście 2 (metoda alternatywna):
Chodzi o to, aby zrobić część paska narzędzi za pomocą scenorysu, a resztę aplikacji za pomocą SwiftUI. Odbywa się to poprzez utworzenie nowej aplikacji z storyboardem jako interfejsem użytkownika. Następnie przejdź do scenorysu i usuń domyślny kontroler widoku i dodaj nowy
NSHostingController
. Połącz nowo dodany kontroler hostingu z głównym oknem, ustawiając jego relację. Dodaj pasek narzędzi do okna za pomocą konstruktora interfejsów.Dołącz niestandardową klasę do
NSHostingController
i załaduj do niej swój widok SwiftUI.Przykładowy kod poniżej:
Korzystanie z tego podejścia daje również możliwość dostosowania paska narzędzi.
źródło
State
zmienneSwiftUIView
za pomocą przycisku na pasku narzędzi? Próbowałem, ale stan się nie zmienia.super.init(coder: coder, rootView: AnyView(SwiftUIView().environmentObject(myObservableObject)))
UIKit + Catalyst
https://developer.apple.com/documentation/uikit/uititlebar
źródło