web-dev-qa-db-ja.com

ボタンなしでSwiftUIに新しいビューを表示する

NavigationButtonはそれで機能するので、ユーザーがボタンをタップする必要なく、SwiftUIを使用して新しいビューを提示したいと思います。ここに例があります

struct ContentView : View {

    var model: Model

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

onAppearに、新しいビューをナビゲーションスタックにプッシュするコードを含めます。

16
BlueSpud

これは、ビューをモーダルとして提示する方法です。

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's up!")
            }
            .onAppear(perform: {
                // Decide whether to show another view or not here
                self.sayHello = true
            })
            .presentation(sayHello ? Modal(HelloView()) : nil)
    }
}

バージョン11.0ベータ4。presentationおよびModal以降は非推奨になりました。

心配無用! 。sheet日を節約します!

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