Переключить вар из другого вида - PullRequest
0 голосов
/ 23 января 2020

В моем ContentView у меня есть изображение Zstack, в котором есть var showText, который я могу включать и выключать с помощью созданной кнопки.

     struct ContentView: View {

    @State var showText = true
    @State var attempts: Int = 0

    var body: some View {
        ZStack {

        VStack {
            GameView()
            Button(action: {
                withAnimation {
                    self.showText.toggle()
                    self.attempts += 1
                }
            }, label: {
                Text("Show / Hide Text")
            })
        }
            if self.showText {
                VStack {
                    Spacer()
                    HStack {
                        Spacer()
                        Image("word5sm")
                        .modifier(Shake(animatableData: CGFloat(attempts)))

                        Spacer()
                    }
                    Spacer()
                }
            }
        }
    }
    }

struct GameView: View {

    @State private var showLetters = ...... etc etc

Однако я не хочу кнопку в ContentView. Я хочу переключить эту переменную из моего GameView. Поэтому, когда пользователь добавляет плитку в игру, он может открыть изображение.

Как переключить переменную, установленную в ContentView, из GameView ??

спасибо

1 Ответ

0 голосов
/ 23 января 2020

Я на самом деле только что отредактировал исходный вопрос, где вы задали его в комментариях:

{ ссылка }

Я добавил Button внутри GameView который теперь переключает Binding, который вы передаете.

Вы можете использовать @Binding для этого:


struct GameView: View {
    @Binding var showText: Bool
    var body: some View {
        VStack {
            Rectangle()
                .foregroundColor(.blue)
            .frame(width: 80, height: 180)
            Circle()
                .foregroundColor(.red)
            .frame(width: 50)
            Rectangle()
                .foregroundColor(.green)
            .frame(width: 150, height: 110)
            Button(action: {
                withAnimation {
                    self.showText.toggle()
                }
            }, label: {
                Text("Toggle from within GameView")
            })
        }
    }
}

struct ContentView: View {

    @State var showText = false

    var body: some View {
        ZStack {
            VStack {
                GameView(showText: self.$showText)
                Button(action: {
                    withAnimation {
                        self.showText.toggle()
                    }
                }, label: {
                    Text("Show / Hide Text")
                })
            }
            if self.showText {
                VStack {
                    Spacer()
                    HStack {
                        Spacer()
                        Text("Hello I am a Text")
                            .foregroundColor(.orange)
                            .font(.system(.largeTitle))
                            .transition(.opacity)
                        Spacer()
                    }
                    Spacer()
                }
            }
        }
    }

}

Спасибо за вопрос еще раз!

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