Скрытие представления SwiftUI от другого представления SwiftUI - PullRequest
0 голосов
/ 10 марта 2020

Я хотел бы выполнить действие, чтобы скрыть элементы на моем экране, когда кнопка нажата с помощью SwiftUI.

Так, например, скажем, у меня есть 2 изображения, текст и кнопка на моем screen.

Если я коснусь кнопки, я хочу, чтобы другие элементы анимировались за пределами экрана. Нажмите кнопку еще раз, и они оживят обратно на экран.

Каждый элемент создается в своем собственном представлении, которое находится в своем собственном файле. Есть ли способ получить доступ к представлению из другого представления?

Вот пример:

struct buttonView : View {

    @State private var isShowingImageView = false

    @Binding var myImage: ImageView

    var body: some View {
        Button(action: {
                    self.isShowingImageView.toggle()
                }) {
                    HStack(spacing: 18) {
                        Image("button-icon")
                        Text("Press Me")
                    }

                }

            if isShowingImageView {
                myImage.hidden()
            }
    }

}

Мое изображение создается в своей собственной структуре / представлении, и когда я нажимаю кнопку, я хочу скрыть это изображение.

Сейчас оно не скрывает его, просто вид, в котором находится моя кнопка, немного оживляет.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Как уже сказал Сэм, вы можете использовать комбинацию @State и @Binding.

struct ContentView: View {

    @State private var show = true

    var body: some View {
        VStack {
            View1(show: $show)
            View2(show: $show)
        }
    }
}

struct View1: View {

    @Binding var show: Bool

    var body: some View {
        VStack {
            if show {
                Text("Text1")
            }

            Text("Text2")
        }
    }
}

struct View2: View {

    @Binding var show: Bool

    var body: some View {
        VStack {
            Text("Text3")

            if show {
                Text("Text4")
            }

            Button(action: {
                self.show.toggle()
            }) {
                Text("Toogle show")
            }
        }
    }
}
1 голос
/ 10 марта 2020

С вашего основного / root представления вы можете создавать @State переменные, которые вы передаете в подпредставления как @Binding переменные.

Я не могу дать вам больше подробностей, не увидев ваш код, но возможно .

...