gpt4 book ai didi

swiftui - 关闭 FullScreenCover 后 NavigationLink 不会触发

转载 作者:行者123 更新时间:2023-12-04 08:12:58 25 4
gpt4 key购买 nike

我在 View 中有一个按钮(在 NavigationView 内),可以打开全屏封面 - 一些数据正在处理时的加载屏幕。当封面被关闭时,我想以编程方式自动路由到下一个 View 。我正在使用 NavigationLink带有标签和选择绑定(bind),并且当封面被解除时绑定(bind)值会更新,但是除非我再次点击相同的“打开模式”按钮,否则不会发生路由。

import SwiftUI

struct OpenerView: View {
@EnvironmentObject var viewModel: OpenerViewModel

@State private var selection: Int? = nil
@State private var presentLoadingScreen = false

var body: some View {
VStack {
NavigationLink(destination: SecondScreen(), tag: 1, selection: $selection) { EmptyView() }
Button(action: {
viewModel.frequency = 0
self.presentLoadingScreen.toggle()
}, label: {
Text("Open cover")
}).buttonStyle(PlainButtonStyle())
}
.navigationBarTitle("Nav title", displayMode: .inline)
.fullScreenCover(isPresented: $presentLoadingScreen, onDismiss: {
self.selection = 1
}, content: ModalView.init)
}
}

struct ModalView: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
Text("Howdy")
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
presentationMode.wrappedValue.dismiss()
}
}
}
}

我第一次按下按钮时,盖子打开了。封面里面只有一个 DispatchQueue.main.asyncAfter 2秒后将其关闭。当它被解雇时, onDismiss触发,但我必须再次按下按钮才能路由到 SecondScreen .
有任何想法吗?
编辑:添加了模态的 View

最佳答案

我得到了它对代码的一些更改,我在这里分享我认为正在发生的事情。
我相信问题是使用 @State 的竞争条件用于切换封面和导航的 bool 值。当封面被解散时,我的主要OpenerView正在重新创建 - 与状态变化有关。因此,我尝试设置 @State var selection触发导航更改,但在此之前, View 会使用 selection = nil 重新创建.
在我的情况下,似乎有两种方法可以解决它:

  • 将封面 bool 值移动到我的 View 模型 - 这有效,但我不希望它在那里,因为它仅应用于此 View ,并且它是此用户流的共享 View 模型。另外,当模式被关闭时,您会看到当前的 OpenerView短暂的闪光,然后被路由到SecondScreen .
  • @State 中保留封面 bool 值,但在设置 bool 值打开模态后立即触发按钮中的导航更改。这对我的用例来说效果更好,因为模式打开了,当它关闭时,用户已经在下一个屏幕上。
  • 关于swiftui - 关闭 FullScreenCover 后 NavigationLink 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65860539/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com