Невозможно использовать 2 поповера в одном представлении. - PullRequest
1 голос
/ 27 апреля 2020

Я создал новое приложение Single View в Xcode 11.4.1, которое использует Swift и SwiftUI. У проекта есть 2 кнопки с опциями, чтобы показать либо popover 1, либо popover 2. Я не получаю никаких ошибок, но работает только popover 2. Мой код ниже.

Я попытался изменить положение кода поповера, но это не имело значения. Если код popover 1 появляется после кода popover 2, то работает только popover 1 (вместо того, чтобы работать только popover 2).

import SwiftUI

struct ContentView: View {

    @State var popover1IsVisible = false
    @State var popover2IsVisible = false

    var body: some View {
        VStack {
            Button(action: {
                self.popover1IsVisible = true
            }) {
                Text("Show Popover 1")
            }

            Button(action: {
                self.popover2IsVisible = true
            }) {
                Text("Show Popover 2")
            }
        }

        .popover(isPresented: $popover1IsVisible) {
            VStack {
                Text("Popover1")
                Button(action: {
                    self.popover1IsVisible = false
                }) {
                    Text("OK")
                }
            }
        }

        .popover(isPresented: $popover2IsVisible) {
            VStack {
                Text("Popover 2")
                Button(action: {
                    self.popover2IsVisible = false
                }) {
                    Text("OK")
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

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

struct ContentView: View {

    @State var showPopover = false
    @State var popover1IsVisible : Bool = false
    @State var popover2IsVisible : Bool = false

    var body: some View {
        VStack {
            Button(action: {
                self.showPopover = true
                self.popover1IsVisible = true
            }) {
                Text("Show Popover 1")
            }

            Button(action: {
                self.showPopover = true
                self.popover2IsVisible = true
            }) {
                Text("Show Popover 2")
            }
        }
        .popover(isPresented: $showPopover) {
            VStack {
                if (self.popover1IsVisible)
                {
                    //Show first view
                    Text("Popover1")
                    Button(action: {
                        self.showPopover = false
                        self.popover1IsVisible = false
                    }) {
                        Text("OK")
                    }
                }
                else
                {
                    //Show secondview
                    Text("Popover 2")
                    Button(action: {
                        self.showPopover = false
                        self.popover2IsVisible = false
                    }) {
                        Text("OK")
                    }
                }
            }
        }
    }
}

enter image description here

1 голос
/ 27 апреля 2020

Вы не можете прикрепить два всплывающих окна к одному виду (VStack). Прикрепите каждый поповер к различным взглядам. Вы можете прикрепить .popover к Button.

...