有没有办法知道 SwiftUI 中的 Menu 控件何时即将打开或打开?我正在分享实现中的菜单代码。
struct ContentView: View {
var body: some View {
Menu("Options") {
Button("Order Now", action: placeOrder)
Button("Adjust Order", action: adjustOrder)
Button("Cancel", action: cancelOrder)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在视图上使用.contextMenuwith .onDrag,这似乎非常棘手:
通过设置为 true,背景颜色变为灰色dragging。这是由.onDrag打开上下文菜单时已经发生的情况触发的(有点早但还可以)。当我使用按钮关闭菜单时,我可以设置dragging为 false。当我使用拖动时,取消初始化dragging时状态会更改回 false 。ItemProvider到目前为止,一切都很好。
问题
当我点击上下文菜单外部将其关闭时,我似乎无法将dragging状态设置回 false。添加.onDisappear到Button菜单中不起作用。
我在这里做错了什么?有什么方法可以在上下文菜单关闭时收到通知,或者在拖动实际开始时发生状态更改dragging(以便在打开上下文菜单时背景不会立即变为灰色)?
代码如下视频。
struct ContentView: View {
@State var dragging = false
var body: some View {
ZStack {
Rectangle()
.foregroundColor(.blue)
.frame(width: 100, height: 100)
.onDrag {
dragging = true
let provider = ItemProvider(contentsOf: URL(string: "Test")!)!
provider.didEnd = {
DispatchQueue.main.async {
dragging = false
}
}
print("init ItemProvider")
return provider …Run Code Online (Sandbox Code Playgroud)