web-dev-qa-db-fra.com

Présentation de nouvelles vues dans SwiftUI sans bouton

Je souhaite donc présenter une nouvelle vue à l'aide de SwiftUI, sans que l'utilisateur n'ait à appuyer sur un bouton, car NavigationButton fonctionnerait avec cela. Voici un exemple

struct ContentView : View {

    var model: Model

    var body: some View {
        NavigationView {
            Text("Hello World")
        }.onAppear {
            if model.shouldPresent {
                // present a new view
            }
        }
    }
}

Dans le onAppear je veux inclure du code qui poussera une nouvelle vue sur la pile de navigation.

16
BlueSpud

Voici un moyen de présenter la vue comme un modal.

struct PresentOnloadView: View {
    var body: some View {
        HStack {
            Text("Hey there")
            }
            .presentation(Modal(HelloView(), onDismiss: nil))
        }
}

struct HelloView: View {
    var body: some View {
        Text("Whats up! ????")
    }
}

De même, si vous cherchez à contrôler s'il faut présenter ou non une variable, vous pouvez faire quelque chose comme ça.

struct PresentOnloadControlledView : View {
  @State var sayHello = false

    var body: some View {
        HStack {
                Text("What's up!")
            }
            .onAppear(perform: {
                // Decide whether to show another view or not here
                self.sayHello = true
            })
            .presentation(sayHello ? Modal(HelloView()) : nil)
    }
}

Depuis Version 11.0 beta 4. Presentation et Modal est obsolète.

Ne pas s'inquiéter! . feuille sauve la journée!

struct PresentOnloadControlledView : View {
  @State var sayHello = false

    var body: some View {
        HStack {
            Text("What's up!")
        }
        .onAppear(perform: {
            // Decide whether to show another view or not here
            self.sayHello = true
        })
        .sheet(isPresented: $sayHello) {
            HelloView()
        }
    }
}
4
SMP