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