view - 从一个视图转换到另一个 SwiftUI
问题描述
我怎样才能从一个过渡View
到另一个?UIKit 中是否有推送/弹出?我必须使用 aNavigationView
吗?如果是这样,如何使用?
解决方案
用一个NavigationView
NavigationView
s 绑定到NavigationButton
(AFAIK 是触发 segue 的唯一方法)。这是一个简单的示例,主视图可以转换为详细视图。
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 元素,但它也允许对视图进行更多控制。
推荐阅读
- java - Spring Integradion DSL 对前端的回答
- javascript - Nuxt 无缘无故重新渲染 - 内容从一个版本弹出到另一个版本
- c++ - 模型上的 QT 无限视图
- python - 我想查找数据框。如果值存在于另一个 df 中,请保持相同的值,否则将 #N/A 放入 pandas python
- security - 如何拒绝授权用户访问注册页面?Symfony 5
- ios - 在 [NuxtJS 电容器 vue] 应用程序中设置深度链接
- chromium - 如何在桌面应用安装中跟踪谷歌广告转化
- javascript - 为什么我的跨度在滚动时不改变颜色
- postgresql - 为什么 Kubernetes 服务外部名称无法在 Internet 上访问?
- azure - Azure APIM 中的 JWT 验证失败