mic*_*ica 3 macos popover nspopover swiftui
我尝试通过设置变量来关闭弹出窗口,该变量显示为 false。
示例代码的行为非常奇怪。有没有更好的方法使用“取消”按钮以编程方式关闭弹出窗口?
import SwiftUI
struct ContentView: View {
let lines = ["line 1", "line 2","line 3"]
var body: some View {
List {
ForEach(lines, id: \.self)
{ Line(text: $0)
}
}
}
}
struct Line: View {
@State var text: String
@State var showSheet = false
var body: some View {
VStack
{ Text("\(text)")
.onTapGesture {
self.showSheet = true
}
}.popover( isPresented: self.$showSheet,
arrowEdge: .trailing
)
{ Pop(showSheet: self.$showSheet)
}
}
}
struct Pop: View {
@Binding var showSheet: Bool
var body: some View {
VStack {
Text("Option 1")
Text("Option 2")
Button("Cancel")
{ self.showSheet = false
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
从问题中尚不清楚在哪个环境以及到底发生了什么奇怪的事情,因为经测试,提供的代码在 Xcode 11.2/3+ 和 iOS13.2+ 上运行良好。
无论如何,还有另一种方法可以使用\.presentationMode以下方法来关闭弹出窗口
更新:嗯,我发现原来的问题可能与 相关macOS,因为 macOS 弹出窗口上提供的内容并未随描述的场景关闭。
这是 iOS/macOS 平台的使用变体(经过测试并适用于 Xcode 11.3 / macOS 10.15)
struct Pop: View {
@Binding var showSheet: Bool
//@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("Option 1")
Text("Option 2")
Button("Cancel")
{
#if os(OSX)
NSApp.sendAction(#selector(NSPopover.performClose(_:)), to: nil, from: nil)
#else
//self.presentationMode.wrappedValue.dismiss() // << behaves the same as below
self.showSheet = false
#endif
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5314 次 |
| 最近记录: |