如何在 SwiftUI 中导航,同时执行逻辑并创建新对象?

问题描述 投票:0回答:1

我有一个 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(或类似的)?或者在按下导航链接后执行一些逻辑?

ios swift swiftui navigation
1个回答
0
投票

可能有几种不同的方法,一个简单的方法是使用 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)
            }
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.