在 TextField 编辑期间关闭时不会出现 Popover

Popover does not appear when closed during TextField edit

我想在我的 macOS 应用程序中使用弹出窗口编辑对象。但由于某种原因,当编辑 TextField 时关闭弹出窗口时,弹出窗口不再出现。 (见下面的 gif)

有什么想法,为什么会这样?

代码:

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)
    }
}

看起来退出编辑器第一响应者并关闭上一个弹出窗口的事件还不够,因此切换了后续弹出窗口的状态,但不允许新的弹出窗口,因为上一个仍在屏幕上。

以下解决方法是可行的(已测试并适用于 Xcode 11.2)

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

当只有一个弹出窗口可绑定到不同子视图的模型(在我看来更合适)并且可由一个状态管理时,也可以考虑设计方法。