无需按钮即可在SwiftUI中呈现新视图

Blu*_*pud 15 ios swift 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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

onAppearI中,我想包含一些将新视图推送到导航堆栈的代码。

小智 10

这是一种将视图呈现为模态的方法。

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! ")
    }
}
Run Code Online (Sandbox Code Playgroud)

同样,如果您想控制是否使用变量显示或不显示,您可以执行以下操作..

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

版本 11.0 beta 4 开始.presentationModal已被弃用。

不要担心!.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()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `.presentation` 效果很好,但是有没有一种方法可以在不将视图包装在 `Model` 中的情况下使用它? (4认同)