Bonjour, je souhaite pouvoir afficher des fenêtres à partir de boutons dans la toolbar comme on le faisait en Swift uikit. (fenêtre au milieu de l’écran pour des explications par exemple, des options …)
j’ai bien créé ma toolbar et mon bouton, mais mon problème c’est que ma fenêtre s’affiche dans ma toolbar. Car elle dépend du bouton de cette même toolbar.
import SwiftUI
struct FenetreMenu: View {
var largeurFenetre:CGFloat
var hauteurFenetre:CGFloat
var body: some View {
ZStack(alignment: .center) {
Rectangle()
.fill(Color.purple)
.frame(width: largeurFenetre, height: hauteurFenetre, alignment: .center)
.cornerRadius(10)
.shadow(color: .black, radius: 2, x: 2, y: 2)
}
}
}
import SwiftUI
struct BoutonFermeture: View {
@Binding var fermetureFenetre:Bool
var couleurFond:Color
var couleurTexte : Color
var body: some View {
Button(action: {
self.fermetureFenetre.toggle()
}, label: {
Text(« Fermer »)
.padding()
.background(couleurFond)
.foregroundColor(couleurTexte)
.cornerRadius(10)
.shadow(color: .black, radius: 2, x: 2, y: 2)
})
}
}
import SwiftUI
struct AproposContenu: View {
var monTexte:String
var couleurTexte:Color
var body: some View {
Text(monTexte)
.foregroundColor(couleurTexte)
}
}
import SwiftUI
struct ContentView: View {
@State var montrerFenetre:Bool = false
var body: some View {
NavigationView {
Text("Application principale")
.padding()
.navigationTitle("Exemple Menu")
.toolbar {
ToolbarItem(placement:.bottomBar) {
ZStack {
Button(action: {
self.montrerFenetre.toggle()
}, label: {
Text("Menu")
})
if montrerFenetre {
ZStack(alignment: .center) {
FenetreMenu(largeurFenetre: 175, hauteurFenetre: 105)
VStack {
AproposContenu(monTexte: "Mon menu", couleurTexte: .black)
BoutonFermeture(fermetureFenetre: $montrerFenetre, couleurFond: .white, couleurTexte: .red)
}
}
}
}
}
}
}
}
}
exemple complet sur GitHub : MenuApplication
Si je supprime la toolbar et que je mets mon bouton au milieu de l’écran, tout fonctionne.
Je n’ai surement pas la bonne approche en SwiftUI. Si d’autres ici ont déjà fait des fenêtres pour leurs applications, je veux bien votre vision.