Popover не появляется при закрытии во время редактирования TextField - PullRequest
2 голосов
/ 10 марта 2020

Я хочу редактировать объекты, используя всплывающие окна в моем приложении MacOS. Но по какой-то причине всплывающее окно больше не появляется, когда оно закрывалось во время редактирования TextField. (см. рисунок ниже)

Есть идеи, почему это происходит?

enter image description here

Код:

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            SubView()
            SubView()
            SubView()
            }.padding()
    }
}

struct SubView: View {
    @State var showPopover = false
    var body: some View {
        VStack {
            Text("Label")
        }.onTapGesture {
            self.showPopover = true
        }
        .popover(isPresented: $showPopover, arrowEdge: .trailing) {
            Popover()
        }
    }
}

struct Popover: View {

    @State var test: String = ""

    var body: some View {
        TextField("Text", text: $test)
    }
}

1 Ответ

1 голос
/ 11 марта 2020

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

Возможен следующий обходной путь (протестировано и работает с Xcode 11.2)

}.onTapGesture {
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
        self.showPopover = true // delay activating new popover
    }
}

Также возможно рассмотреть подход к дизайну, когда существует только один поповер, привязываемый к моделям разных подпредставлений (который мне кажется более подходящим) ) и управляется одним государством.

...