swift - 按钮,如何在导航栏中嵌入的swiftUI中打开新视图
问题描述
我在NavigationBar
. 我正在尝试制作按钮以打开一个新的View
名为DetailView
我尝试使用NavigationLink
,但它在按钮内不起作用。
import SwiftUI
struct ContentView: View {
@ObservedObject var dm: DataManager
@State var isAddPresented = false
var body: some View {
NavigationView {
HStack {
List () {
ForEach (dm.storage) { data in
StileCella(dm2: data)
}
}
.navigationBarTitle("Lista Rubrica")
.navigationBarItems(trailing: Button(action: {
self.isAddPresented = true
// Load here the DetailView??? How??
DetailView()
}) {
Text("Button")
})
}
}
}
}
struct DetailView: View {
var body: some View {
VStack(alignment: .center) {
Text("CIAO").bold()
Spacer()
Image(systemName: "star")
.resizable()
}
}
}
解决方案
您只需要在视图中添加一个工作表修饰符,它会根据 isAddPresented 的值呈现您的视图,就像这样:
struct ContentView: View {
@State var isAddPresented = false
var body: some View {
NavigationView {
List(dm.storage){ data in
StileCella(dm2: data)
}
.navigationBarTitle("Lista Rubrica")
.navigationBarItems(trailing: Button("Button") {
self.isAddPresented = true
})
} .sheet(isPresented: $isAddPresented,
onDismiss: { self.isAddPresented = false }) {
DetailView()
}
}
}
重要的是要记住在关闭时将 isAddPresented 设置回 false 以防止它再次出现。
推荐阅读
- vuejs2 - 查看渲染错误 (Vue)
- ios - Swift Charts-条形图垂直网格线
- python - 如何在 python 中将 XML 转换为 HTML?
- clojure - 勇敢而真实的 Clojure 中的 Peg Thing 示例:会有堆栈溢出问题吗?
- java - 通过启动 Spring Boot 应用程序在 H2 数据库中创建表
- android - Room RxJava2 使用 Flowable 更新 UI
- > 当用户进行查询或更改过滤器时
- c# - Xamarin Forms Shell - 带有复杂构造函数的页面的汉堡菜单
- php - Laravel,如何将数字转换为小时和分钟
- asp.net-core - 如何使用 SignalR (.NET Core 3.0) 在两个客户端之间流式传输视频?
- android - 将参数传递给 BroadcastReceiver 子类 - Android