У меня есть вопрос по поводу «Назад» перехода экрана SwiftUI - PullRequest
0 голосов
/ 24 февраля 2020
"A> B> A> B> A ..."

Когда мы повторяем операцию переключения с screen A на screen B и снова возвращаемся к screen A, мы считаем, что если используется следующий код, загрузка продолжит накапливаться, потому что информация старого экрана сохранено.

Однако код возврата, включенный в "NavigationLink", не перезагружает предыдущий экран, поэтому в настоящее время используется следующий код:

Вопрос:

Что если я хотите всегда перезагружать экран при вызове старого экрана?

struct ContentView: View {
    @State private var Flag : Bool = false
    var body: some View {
        NavigationView {
            VStack{
                Spacer()
                Button(action: {self.Flag.toggle()}){
                    Text("OpenA")
                    NavigationLink(destination: A(),isActive: $Flag) {
                        EmptyView()
                    }
                }
                Spacer()
            }.navigationBarTitle("").navigationBarHidden(true)
        }.navigationBarBackButtonHidden(true).navigationViewStyle(StackNavigationViewStyle())
    }
}


struct A: View {
    @State private var Flag : Bool = false
    var body: some View {
        VStack{
            Group{
                Spacer()
                Button(action: {self.Flag.toggle()}){
                    Text("A > B")
                }
                NavigationLink(destination: B(),isActive: $Flag) {
                    EmptyView()
                }
                Spacer()
            }.navigationBarTitle("").navigationBarHidden(true).navigationBarBackButtonHidden(true)
        }.navigationBarBackButtonHidden(true).navigationViewStyle(StackNavigationViewStyle())
    }
}

struct B: View {
    @State private var Flag : Bool = false
    var body: some View {
        VStack{
            Group{
                Spacer()
                Button(action: {self.Flag.toggle()}){
                    Text("B > A")
                }
                NavigationLink(destination: A(),isActive: $Flag) {
                    EmptyView()
                }
                Spacer()
            }.navigationBarTitle("").navigationBarHidden(true).navigationBarBackButtonHidden(true)
        }.navigationBarBackButtonHidden(true).navigationViewStyle(StackNavigationViewStyle())
    }
}

1 Ответ

0 голосов
/ 24 февраля 2020
  1. код возврата, включенный в "NavigationLink"

NavigationLink является структурой, поэтому ничего похожего на возвращаемое значение не существует, кроме NavigationLink сам по себе

На другом сайте

NavigationLink(destination: A(),isActive: $Flag) {
    EmptyView()
}

один из параметров его конструктора связывается со значением Bool

@State private var Flag : Bool = false

Если пользователь нажимает на навигационную ссылку, это значение изменяется на true, после того как связанное представление отклоняется пользователем, оно снова меняется на false. Это означает, что ContentView информирован, и ContentView должен пересчитать свое свойство body (другими словами, если в его теле есть что-то другое, значение будет отражать это.

Я не вижу, что ничего не изменилось там! Что вы ожидаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...