从其他视图切换变量

时间:2020-01-23 15:22:09

标签: xcode swiftui

在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中切换此变量。因此,当用户在游戏中添加图块时,它会弹出图像。

如何从GameView切换ContentView中设置的var?

谢谢

1 个答案:

答案 0 :(得分:0)

我实际上只是编辑了原始问题,即您在评论中的位置:

https://stackoverflow.com/a/59863781/5981293

我在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()
                }
            }
        }
    }

}

感谢您再次询问!