Родительский вид не обновляется после закрытия дочернего представления

У меня есть простое представление (родительское представление) со следующим NavigationLink:

NavigationLink(
    destination: QuizScreen(quizPack: self.quizPack, isQuizPackOpen: $isQuizPackOpen),
    isActive: $isQuizPackOpen,
    label: {
        Text("Open")
            .font(.custom("Lato-Bold", size: 17))
            .foregroundColor(Color("colorAccent"))
    }
)

И дочернее представление закрывается, просто устанавливая параметр привязки isQuizPackOpen на false.

Используя отладчик, я заметил, что когда я закрываю дочернее представление, родительское представление не обновляется, как если бы я менял простую переменную @State.

Можно ли обновить родительское представление после того, как для параметра isQuizPackOpen будет установлено значение false дочерним представлением?

это должно сработать, пожалуйста, добавьте еще контекст   —  person Gabriele Feudo    schedule 26.12.2020

вы можете просто поиграть на onAppear, отметьте if !isQuizPackOpen, чтобы обновить значения (StateObservableObject) вашего родительского представления   —  person Gabriele Feudo    schedule 26.12.2020

См. также:  Tomcat 9 запускается на терминале [ubuntu 18.04], но не загружается в браузере
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Gabriele Feudo

    Использование onAppear

    @State var isQuizPackOpen = false
    @ObservableObject viewModel = MyViewModel()
    VStack {
       NavigationLink(destination: QuizScreen(quizPack: self.quizPack, isQuizPackOpen:$isQuizPackOpen),isActive: $isQuizPackOpen,
        label: {
                Text("Open")
                    .font(.custom("Lato-Bold", size: 17))
                    .foregroundColor(Color("colorAccent"))
                })
    }.onAppear {
            print("ContentView appeared!")
            if !isQuizPackOpen {
             viewmodel.relaodOrRefreshData()
            }
    }
    

    И если вам нужно обновить его только в некоторых условиях, передайте другую переменную @State в свой QuizScreen и проверьте ее вместо if !isQuizPackOpen

    Это решение отлично работает person Gabriele Feudo; 27.12.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: