按钮,如何在嵌入导航栏的swiftUI中打开新视图
我在按钮,如何在嵌入导航栏的swiftUI中打开新视图,swift,swiftui,Swift,Swiftui,我在导航栏上嵌入了一个按钮。 我正在尝试使用按钮打开一个新的视图,名为DetailView 我尝试使用NavigationLink,但它在按钮内部不起作用 import SwiftUI struct ContentView: View { @ObservedObject var dm: DataManager @State var isAddPresented = false var body: some View { NavigationView
导航栏上嵌入了一个按钮。
我正在尝试使用按钮打开一个新的视图
,名为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,以防止它再次显示。如果您想打开一个新视图,就像我们以前通过故事板(而不是图纸)打开一样,可以通过以下方式更新代码:
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(leading:
NavigationLink(destination: DetailView()) {
Text("Button")
})
}
}
}
}
struct DetailView: View {
var body: some View {
VStack(alignment: .center) {
Text("CIAO").bold()
Spacer()
Image(systemName: "star")
.resizable()
}
}
}
只需在navigationBarItems中添加NavigationLink,而不是按钮。这就行了!我写了完整的指南,但主要的变化点是,我使用
.navigationBarItems(leading:
NavigationLink(destination: DetailView()) {
Text("Button")
})
而不是:
.navigationBarItems(trailing: Button(action: {
self.isAddPresented = true
// Load here the DetailView??? How??
DetailView()
}) {
Text("Button")
})
嗯,NavigationLink
在很多方面都是一个按钮。您是否正在尝试将按钮
与导航视图
一起使用?大多数iOS应用程序都应该使用导航链接
——用户希望这样。请更详细地解释一下你想要什么,你想实现什么。特别是,为什么NavigationView中的NavigationLink不够。谢谢。我找到了解决方案,问题是NavigationLink必须包含在一个堆栈中,或者要在bar项的按钮中实现的堆栈中