我有 NavigationLink,它使用带有显示sheetView的按钮的NavigationView来引导自己的视图。
移动到目标视图并显示sheetView后,返回上一个视图,那么即使您点击按钮,sheetView也不会出现。
如果再次移至目标视图,无需点击按钮即可显示工作表。
我做错了什么?
struct MainView: View {
var body: some View {
ZStack {
NavigationView {
DestinationView()
.navigationTitle("Home")
.navigationBarTitleDisplayMode(.inline)
}
AddButton()
}
}
}
struct DestinationView: View {
@EnvironmentObject var model : Model
var body: some View {
List {
NavigationLink(destination:
DestinationView().navigationTitle("Test")) {
Text("Go to Next View")
}
}
.sheet(isPresented: $model.isShowingSheet) {
Text("SheetView")
}
}
}
struct AddButton: View {
@EnvironmentObject var model : Model
var body: some View {
Button(action: {
model.isShowingSheet = true
}) {
Image(systemName: "plus.circle")
.imageScale(.large)
}
}
}
class Model: ObservableObject {
@Published var isShowingSheet: Bool = false
}
我不想将sheetView添加到MainView或AddButton。
提前致谢。
返回并点击按钮时看不到
sheet
的原因是
它会呈现在另一个视图中,因为您使用 same
model.isShowingSheet
变量无处不在。
您可以尝试不同的方法,其中每个
DestinationView
控制其
自己的 isShowingSheet
状态,然后将 ZStack
移至该状态。
示例代码:
struct MainView: View {
var body: some View {
NavigationStack {
DestinationView()
.navigationTitle("Home")
.navigationBarTitleDisplayMode(.inline)
}
}
}
struct DestinationView: View {
@State private var isShowingSheet: Bool = false
var body: some View {
ZStack {
List {
NavigationLink(destination: DestinationView().navigationTitle("Test")) {
Text("Go to Next View")
}
}
Button(action: {
isShowingSheet = true
}) {
Image(systemName: "plus.circle")
.imageScale(.large)
}
}
.sheet(isPresented: $isShowingSheet) {
Text("SheetView")
}
}
}