SwiftUI не может нажимать кнопки на экране наложения / всплывающего окна - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть вид, который я представляю в верхней части других видов, например, всплывающий вид, внутри вида у меня есть пара кнопок. Когда я добавляю одну кнопку в переигрываемом виде и нажимаю кнопку, она работает. Однако, если я добавил несколько кнопок и попытался нажать на кнопки, они не работают. Вместо этого он щелкает по компонентам ниже представления.

Я хотел бы добавить несколько кнопок и щелкнуть их в режиме наложения, я не уверен, в чем моя ошибка в этом коде:

Вот мой код:

struct MenuContent: View {

    var body: some View {
        List() {
            ForEach(0..<2) { _ in
                HStack {
                    ForEach(0..<4) { _ in
                        Button(action: {
                            print("tapped button")
                        }) {

                            VStack {
                                Text("Rev")

                                Image("trash.fill")
                                    .resizable()
                                    .scaledToFit()
                                    .frame(width: 60, height: 60)
                            }

                        }.background(Color.blue)
                    }
                }
            }
        }

    }
}

OverlayView

struct OverlayMenu: View {

    let width: CGFloat

    @Binding var show: Bool

    var body: some View {

        return ZStack {
                HStack {
                    MenuContent()
                        .frame(width: self.width, height: 160)
                        .cornerRadius(10, antialiased: false)
                        .offset(x: self.show ? 0 : -self.width, y: 285)
                        .animation(.spring())

                    Spacer()
                }
            .shadow(radius: 20)
        }
    }
}

ContentView

struct ContentView: View {

    @State var show = true

    var body: some View {

        OverlayMenu(width: 350,
                      show: $show)
    }
}

1 Ответ

1 голос
/ 28 февраля 2020

Я думаю, что есть некоторые проблемы с List строками и жестами к ним. Вы можете справиться с этим, если хотите, или вы можете попробовать VStack вместо List и использовать Divider, чтобы разделить «строки», и нажатия на кнопки будут обрабатываться, как вы ожидаете. Я немного изменил ваш пример, чтобы показать, как он работает. Я думаю, что вы можете самостоятельно управлять дизайном:

struct MenuContent: View {

    @State var hits = 0

    var body: some View {

        VStack {

            Text("\(hits)")

            Divider().frame(width: 250)

            ForEach(0..<2) { _ in
                ButtonsLine(hits: self.$hits)
                Divider().frame(width: 250)
            }
        }
    }

}

struct ButtonsLine: View {

    @Binding var hits: Int

    var body: some View {
        HStack {
            ForEach(0..<4) { value in
                Button(action: {
                    print("tapped button")
                    self.hits += value + 1
                }) {
                    ButtonDesign()
                }
            }
        }
    }
}

struct ButtonDesign: View {

    var body: some View {
        VStack {
            Text("Rev")
                .foregroundColor(.black)

            Image(systemName: "trash")
                .resizable()
                .scaledToFit()
                .foregroundColor(.red)
                .frame(width: 60, height: 60)

        }
        .shadow(radius: 20)
    }

}

, и в результате получается:

enter image description here

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