我有一个 EditTapasView,可以编辑用户创建的任何 Tapas。要创建一个,他们可以按“New Tapas”按钮,将他们发送到带有新创建的 Tapas 的 EditTapasView。
到目前为止,这一切都需要使用一张纸才能完成。
Button(action: {
newTapas = addTapas()
/// Delay the toggle of the Sheet by .1 second.
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
shouldPresentSheet.toggle()
}
}, label: {
Text("New Tapas")
.font(.system(size: 17))
.padding(.trailing)
.padding([.top, .bottom], 10)
})
.sheet(isPresented: $shouldPresentSheet) {
print("Sheet dismissed!")
} content: {
EditTapasView(tapas: newTapas)
}
但是现在我在 EditTapasView 中添加了一个新的 NavigationLink 来进行一些编辑,并且这部分在工作表中不起作用。
当我只使用 NavigationLink 并为其提供 addTapas() 函数时,它会不断创建新的 Tapas,而无需任何点击。
NavigationLink(destination: EditTapasView(tapas: addTapas())) {
Text("New Tapas")
.font(.system(size: 17))
.padding(.trailing)
.padding([.top, .bottom], 10)
}
然后我研究了如何以编程方式导航,但我无法使其发挥作用。
NavigationStack (path: $path) {
Button(action: {
newTapas = addTapas()
path = EditTapasView(tapas: newTapas)
}, label: {
Text("New Tapas")
.font(.system(size: 17))
.padding(.trailing)
.padding([.top, .bottom], 10)
})
}
那么有什么办法可以解决我的问题吗?要么在按钮的操作部分简单地使用NavigationLink(或类似的)?或者在按下导航链接后执行一些逻辑?
可能有几种不同的方法,一个简单的方法是使用 navigationDestination,如果它不是太有问题的话。 NavigationStacks 和 NavigationSplitViews 尚未真正准备好用于生产。
@State private var newTapa: Tapa?
var body: some View {
NavigationStack {
Button("Add Tapas") {
newTapa = Tapa()
}
.navigationDestination(item: newTapa) { tapa in
TapaEditView(tapa: tapa)
}
}
}