从一个视图过渡到另一个视图SwiftUI

3
我该如何从一个 View 切换到另一个?是否有类似 UIKit 中的 push/pop 操作?我必须使用 NavigationView 吗?如果是,应该怎么做?
2个回答

3

使用 NavigationView

NavigationViewNavigationButton 相关联(据我所知,这是触发过渡的唯一方式)。以下是一个简单的示例,演示如何从主视图过渡到详细视图。

struct DetailView : View {
    let value: String

    var body : some View {
        Text("Full View: \(value)")
    }
}

struct MainView : View {
    var body : some View {
        NavigationView {
            NavigationButton(destination: DetailView(value: "Hello World"),
                             label: { Text("Click Me") })
        }
    }
}

这将自动处理过渡并添加返回按钮。

使用状态

另一种方法是使用有状态的变量来确定是否显示子视图。下面是另一个简单的示例:

struct DetailView : View {
    let value: String
    let onDone: () -> Void

    var body : some View {
        VStack {
            Text("Full View: \(value)")
            Button(action: onDone, label: { Text("Back") })
        }
    }
}

struct MainView : View {
    @State var displaySubview = false

    var body : some View {
        VStack {
            if displaySubview {
                DetailView(value: "Hello World") {
                    self.displaySubview = false
                }
            } else {
                Button(action: {
                    self.displaySubview = true
                }, label: { Text("Click Me") })
            }
        }
    }
}

这种方法要求您实现更多的UI元素,但也允许更多地控制视图。


3
这是触发Segue的唯一方法吗?意思是不能再从按钮声明一个Segue到不同的视图了吗?必须使用导航控制器吗? - Julian Silvestri

1

它对我有效

struct ContentView : View {
var body : some View {
    NavigationView {
        NavigationLink(destination: DetailView(), label: { Text("To Detail")})
    }
}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接