Представление новых представлений в SwiftUI без кнопки

Поэтому я хочу представить новый вид, используя SwiftUI, без необходимости нажатия пользователем кнопки, так как NavigationButton будет работать с этим. Вот пример

struct ContentView : View {

    var model: Model

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

В onAppear я хочу включить некоторый код, который будет выдвигать новый взгляд на стек навигации.

Ответ 1

Вот способ представить вид как модальный.

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! 👻")
    }
}

Аналогичным образом, если вы хотите контролировать, следует ли представлять или не использовать переменную, вы можете сделать что-то подобное..

struct PresentOnloadControlledView : View {
  @State var sayHello = false

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

As of Version 11.0 beta 4.presentation и Modal has been deprecated.

Not to worry! .sheet saves the day!

struct PresentOnloadControlledView : View {
  @State var sayHello = false

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

Ответ 2

Вы можете просто поместить логику в NavigationView. Как это:

@State var x = true;

var body : some View {
    NavigationView {
        if x {
            Text("Hello")
            Button(action: {
                self.x = false;
            }, label: { Text("Click Me") })
        } else {
            Text("World")
        }
    }
}