Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.8k views
in Technique[技术] by (71.8m points)

swiftui - Programmatic navigation with NavigationView/NavigationLink delay jumps back

I created a simple showcase where my problem can be reproduced; what I'm doing is navigating from the initial view => View1 => View2.

The navigation from the initial to View1 happens via button tap, nothing special here.

My View1 looks the following:

struct View1: View {
    @ObservedObject private var viewModel = ViewModel()

    private let includeDelay = true

    var body: some View {
        NavigationLink(
            destination: View2(),
            isActive: $viewModel.foo,
            label: {
                Text("View 1")
            })
            .onAppear(perform: {
                DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(includeDelay ? 500 : 0)) {
                    viewModel.doSomething()
                }
            })
    }
}

class ViewModel: ObservableObject {
    @Published var foo = false
    func doSomething() {
        foo = true
    }
}

If I include the delay in onAppear, it works as expected; after the delay, I get navigated to View2 and stay there.

But if I remove the delay (or set it to e.g. 300ms) I get navigated to View2, but immediately get navigated back. I don't understand what's happening here; why is my $viewModel.foo set to false after my setting to true?

question from:https://stackoverflow.com/questions/65914281/programmatic-navigation-with-navigationview-navigationlink-delay-jumps-back

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...